鏡像與容器
當我們使用Docker安裝應用時,Docker會自動搜索并下載應用鏡像(image)。鏡像不僅包含應用本身,還包含應用運行所需要的環境,配置、系統函數庫。Docker會在運行鏡像時創建一個隔離環境,稱為容器(container)
總結來說:docker的鏡像做到了忽略操作系統環境,忽略系統本身的差異去直接部署,Docker會在運行鏡像時創建一個隔離環境,docker類似于Windows系統,就相當于在電腦中有下了一個小系統,里面獨立運行程序。
鏡像倉庫:存儲和管理鏡像的平臺,Docker官方維護了一個公共倉庫:DockerHub
主要流程:下載鏡像運行,形成容器。
如何找到想要的鏡像?
在docker服務端執行一個命令即可。
主要執行流程:
在docker客戶端輸入命令,docker daemon的守護進程會監聽該命令,再去對應的鏡像倉庫去拉去鏡像,下載到本地運行,運行時會為鏡像區創建一個隔離的環境稱之為容器,多個容器之間相互隔離,可以進行多實例部署,形成集群,相互之間沒有干擾,也可以在一個服務上去部署多個不同應用的實例,不需要擔心相互干擾的問題,搭建集群部署整個復雜的微服務應用非常方便。
總結:有了docker的鏡像和容器,運維在部署時就忽略了系統的差異以及應用之間的干擾,節省了非常多的時間。
命令解讀
?docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \mysql
第一行 docker run
是命令的起始,所有的docker命令都是以docker為前綴,后面的run是一個子命令,docker命令下有很多很多的子命令,
-
docker run :創建并運行一個容器,-d 是讓容器在后臺運行,命令結束后,MySQL的進程以及它的容器會持續保持一個運行狀態,就不會用影響正常工作,因此
docker run -d
可以認為成一套配套的指令。 -
--name MySQL:給容器起個名字,必須唯一
-
-p 3306:3306:設置端口映射 宿主機端口:容器內端口。容器內端口取決于進程,不需要改動,宿主機的端口可以改變,如果要布置集群的話,就需要改變宿主機端口,防止端口沖突
舉例說明:
例如配置一臺虛擬機的IP地址為192.168.88.130,我們可以訪問到該IP地址,是可以ping通的。
而配置在這臺虛擬機上的容器是一個隔離的環境。
比如部署MySQL容器,MySQL啟動端口為3306,但是容器是隔離環境,有自己獨立的內存空間,有自己獨立的文件系統,也有自己獨立的網絡空間。因此這個MySQL容器中的京城一旦啟動,會有自己的IP地址,這個網絡空間對外是不可訪問的。
因此MySQL客戶端無法直連該容器的端口,但是可以連接容器外的虛擬機,即宿主機,為了連接該容器,需要去做一個端口的映射,可以將宿主機的3306端口跟容器的3306端口做一個映射。
因為容器是由docker來控制的,內部完全可以做好這個映射,這樣,當客戶端訪問外部宿主機的3306端口時,docker就會將請求轉到容器的3306端口,這樣就間接的訪問到了容器。即MySQL客戶端連接jdbc:mysql://192.168.88.130就能連接到宿主機的3306端口,請求就會轉到容器內,這樣就實現間接訪問了。
這就是端口映射的作用。
-
-e KEY = VALUE:設置環境變量,環境變量是由鏡像內部去執行容器時用到的,因此是由鏡像來決定的,比如現在是MySQL的容器,MySQL官方規定將來需要怎樣的環境變量,這是由鏡像制作者去規定的。需要去鏡像文檔中查看。
-
mysql:指定運行的鏡像的名字 docker run 一執行,docker的守護進程會幫助我們搜索和下載并且部署應用,而這些都需要靠容器名來指定。
鏡像命名規范
-
鏡像名稱一般分為兩部分組成:[repository]:[tag]
-
其中repository就是鏡像名
-
tag是鏡像的版本
-
-
在沒有指定tag時,默認是latest,代表最新版本的鏡像
Docker基礎
常見命令
Docker最常見的命令就是操作鏡像、容器的命令,詳情可見官方文檔:Docker 文檔
-
docker pull:拉去鏡像,從鏡像倉庫中下載鏡像到本地鏡像中
-
docker images :查看所有本地鏡像
-
docker rmi :刪除指定本地鏡像
-
docker build:自定義鏡像:需要定義一個docker file 基于docker file文件使用 docker build來完成構建
-
docker save:將打包好的鏡像通過save命令保存到本地變成壓縮文件,和docker load配合可以將鏡像傳遞,但是使用較少
-
docker load:將壓縮好的鏡像解壓
-
docker push:將本地鏡像推到鏡像倉庫,鏡像倉庫可以是公用,也可以私用,
以上都是鏡像的相關操作
鏡像最終要去創建對應的容器還要運行
-
docker run:創建容器并運行,該命令為自動化,如果發現鏡像不存在,會先去拉取鏡像,之后再自動創建容器,再去運行
-
docker stop:停止容器運行(停止的是容器內部的那個進程),容器還在。
-
docker start:啟動容器,將容器內部的停止的進程再次啟動
注意事項:docker run每執行一次就會創建一個容器并運行,而docker start只是啟動已有容器中停止的進程,不會創建容器。
-
docker ps:查看容器的運行狀態 ps(進程狀態)
-
docker rm: 刪除容器
-
docker logs:查看容器日志
-
docker exec:執行一些命令進入容器的內部,有時需要對容器做修改,可以通過該命令進入容器,進行一些處理
以上就是docker的常用命令了
案例演示:查看DockerHub,拉取Nginx鏡像,創建并運行Nginx容器
需求:
-
在DockerHub中搜索Nginx鏡像,查看鏡像的名稱
-
拉取Nginx鏡像
-
查看本地鏡像列表
-
創建并運行Nginx容器
-
查看容器
-
停止容器
-
再次啟動容器
-
進入Nginx容器
-
刪除容器
實現步驟:
首先去瀏覽器查看https://hub.docker.com/,尋找Nginx鏡像
執行命令
測試壓縮功能
解壓功能
創建并運行容器,并查看運行狀態
停止容器運行
注意事項:默認情況下 docker ps 查看的是運行中的容器,如果想要查看所有容器狀態,就需要去添加 -a 參數
再次啟動
以上就是容器的一些基本操作
除此之外還可以查看日志
如果想要一直查看該容器日志,就需要加上參數 - f
主要用在調試場景。
還可以進入容器的內部來操作:
-it 指添加一個可輸入的終端 后面跟容器名 進入容器內部后,使用bash命令來進行交互
在容器內部,docker容器模擬了一個計算機,有獨立網絡,內存,文件系統。
就是獨立的Linux系統。
注意事項:不能刪除一個正在運行中的容器,可以選擇停止運行容器后刪除,或者加上 - f 強制刪除。
以上就是在docker中常用的命令。
希望對大家有所幫助