在介紹使用 Docker Container 指令之前,先讓我們再一次簡單的了解到 Dockerfile、Docker Image、Docker Container 三個 term 之間的關係,先看以下的圖:
在啟動 Docker Container 時主要會是三個部份組合而成的,最底層的是 Docker Image 這一層主要是透過撰寫 Dockerfile 之後 Build 出來的 Docker Image,它是一個唯讀的檔案, Docker Image 可以存放的地方就是前幾天所介紹的 Docker Hub 或是私有網路的 Docker Registry。 執行啟動了 Docker Container,會加上二層,就是需要先 Init Container的設定,例如是 host name、環境變數……等等的一些系統設定,之後最上層再加上使用者可以在此層去讀寫資料的部份。
從這個架構來看使用 Docker 其實相對比 VM 較省儲存空間,因為底層都是用相同的 Image,只有上層在啟動 Docker Container 會花掉一些空間。另外如果把 Docker Container 的資料刪除掉,之前儲存的資料也會跟著被刪除掉,因此需要使用 Docker 提供的 Volume,把資料存放在實體的硬碟上,這個在之後會介紹到。
Example1:
啟動了 nginx 的 Continer,使用以下的指令執行如下
$ docker run -d -p 8080:80 --restart=always --name nginx nginx
參數說明:-d
:把 container 執行在背景裡-p
: 做 port 的mapping,container裡的port 80 mapping 到 host 的8080 port--restart=always
:如果 container 遇到例外的情況被 stop 掉,例如是重新開機,docker 會試著重新啟動此 container--name=registry
:設定 container 的 name 為 nginx
最後一個參數 nginx 是 docker image 的 Name
使用 docker run
指令的流程如下:
(1)會試著在 local 裡找有沒有 nginx Docker Image,如果沒有會自動的從 Docker Hub 上 pull 下來
(2)有了 Docker Image 之後從會mount Init設定 Container 系統和 mount 可讀可寫層
(3)Container 啟動完成
Example2:
在執行 Container 如何看到 log,指令如下
$ docker logs nginx
如下圖
Example3:
如何看到執行了哪些 Container,可以使用以下的指令
$ docker ps -a
參數說明:-a
:如果沒有加上 -a 參數,只會顯示 running 的 container
如下圖
Example4:
如何把執行的 Container 刪除掉,使用以下的指令
$ docker rm -f nginx
參數說明:-f
:強制刪除 Container
nginx 為 Container Name
如下圖:
Example5:
如何把 Docker Image 刪除掉,使用以下的指令
$ docker rmi docker.io/nginx
參數說明:
docker.io/nginx 為在 pull Docker Image 的 name,其實可以把 docker.io 省略掉
如下圖:
今天介紹了Docker Container的一些概念以及在執行 Docker Container 會常使用到的指令,希望對大家會有幫助。如果忘記 Docker 的指令可以輸入 docker --help
或是 docker run --help
的指令去查看說明。
明天還會繼續再介紹其它常會使用到指令