筆者規劃容器命令和模塊部署分開來寫,本節只是介紹容器的基本命令使用,下節介紹web示例的部署。nginx
查看本地的容器是經過 docker ps <options>web
[root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@doc03 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 299657e97c08 centos:latest "/bin/bash" 2 minutes ago Exited (127) 2 minutes ago trusting_darwin 67d2a66efa49 centos:latest "/bin/bash" 20 minutes ago Exited (0) 3 minutes ago brave_clarke 26e45c621b75 centos:latest "/bin/bash" 36 minutes ago Exited (127) 36 minutes ago peaceful_nobel [root@doc03 ~]# docker ps -a -n2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 299657e97c08 centos:latest "/bin/bash" 10 minutes ago Exited (127) 9 minutes ago trusting_darwin 67d2a66efa49 centos:latest "/bin/bash" 28 minutes ago Exited (0) 10 minutes ago brave_clarke
● -adocker
查看本地全部歷史容器,包括已中止、異常、正常運行的容器vim
● -n2centos
列出最近建立的2個容器緩存
若不加"-a",則只會顯示正在運行或一直進行重啓的容器,不會顯示中止容器bash
[root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
● CONTAINER IDless
容器對應且惟一的IDide
● IMAGEspa
依賴鏡像,經過這個鏡像來實例化一個容器
● COMMAND
顯示容器內運行的主進程
● CREATED
顯示容器被建立後截止到如今時間
● STATUS
Up X minutes
顯示正常運行容器的運行時長
Exited X minutes ago
顯示終止容器的退出時長
Up X minutes (Paused)
顯示正常運行的容器處於暫停狀態
● PORTS
顯示容器內與本地端口映射關係,編排時在詳細介紹
● NAMES
容器對應且惟一的名稱
啓動容器的一個簡單方式是經過 docker run <container ID> | docker run <NAMES>
基礎的命令格式爲
docker run <options> <image>:<tag> <service>
下面的命令啓動了一個簡單的容器,其中運行了容器化版本的CentOS Linux。
[root@doc03 ~]# docker run -it centos:latest /bin/bash Unable to find image 'centos:latest' locally latest: Pulling from library/centos 7a0437f04f83: Pull complete Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image for centos:latest [root@67d2a66efa49 /]#
● -it
使容器具有交互性並終端進行鏈接
● /bin/bash
指定在容器中運行的程序,後續會在"容器進程"中詳細說明
當敲擊回車以後,Docker客戶端選擇合適的API來調用Docker daemon。Docker daemon接收到命令並搜索Docker本地緩存,查看是否有命令所請求的鏡像。在上面的示例中,本地緩存未找到該鏡像,因此Docker接下來查詢Docker Hub中是否有對應的鏡像。找到該鏡像後,Docker將鏡像拉取到本地,存儲在本地緩存當中。
一旦鏡像拉取到本地,Docker daemon就建立容器並在其中運行指定的應用,細心的小夥伴會發現Shell提示符發生了變化。在上面的示例中,Shell提示符變動爲"root@67d2a66efa49 /","@"以後的一長串數字就是容器惟一ID的前12個字符。
容器內的部分命令沒法正常工做,我的理解容器內的應用是最小化安裝。下面的示例就展現了2個命令—— 一條執行成功,一條執行失敗
[root@67d2a66efa49 /]# pwd / [root@67d2a66efa49 /]# vim container.txt bash: vim: command not found
在示例中,讓容器運行Bash Shell(/bin/bash),這使得Bash Shell是容器中惟一運行的進程,能夠經過"ps aux"查看
[root@67d2a66efa49 /]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 12012 2176 pts/0 Ss 13:31 0:00 /bin/bash root 29 0.0 0.0 44620 1784 pts/0 R+ 13:43 0:00 ps aux
列表中的pid爲"1"的進程就是Bash Shell進程,pid爲"29"是輸入命令產生的臨時進程
這意味着輸入"exit"會退出Bash Shell,那麼容器也會退出(終止)。緣由是容器若是不容許任何進程運行則沒法存在————殺死Bash Shell即殺死了容器中惟一運行的進程,致使這個容器也會被殺死。說明白點殺死容器中的主進程,則容器也會被殺死,以下示例
[root@299657e97c08 /]# exit exit [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@doc03 ~]#
中止(關停)容器的一個簡單方式是經過 docker stop <container ID> | docker stop <NAMES>
可經過"CONTAINER ID"或"NAMES"列對應的值來指定須要中止的容器
[root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a5023dce701 centos:latest "/bin/bash" 13 minutes ago Up 13 minutes determined_yalow [root@doc03 ~]# docker stop 6a5023dce701 6a5023dce701 [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
刪除容器的一個簡單方式是經過 docker rm <container ID> | docker rm <NAMES>
可經過"CONTAINER ID"或"NAMES"列對應的值來指定須要刪除的容器,刪除容器前必需要先"stop"對應容器,當前也可使用"--force"強制刪除,但不建議
[root@doc03 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 299657e97c08 centos:latest "/bin/bash" 37 minutes ago Exited (127) 37 minutes ago trusting_darwin 67d2a66efa49 centos:latest "/bin/bash" About an hour ago Exited (0) 26 seconds ago brave_clarke 26e45c621b75 centos:latest "/bin/bash" About an hour ago Exited (127) About an hour ago peaceful_nobel [root@doc03 ~]# docker rm 26e45c621b75 26e45c621b75 [root@doc03 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 299657e97c08 centos:latest "/bin/bash" 37 minutes ago Exited (127) 37 minutes ago trusting_darwin 67d2a66efa49 centos:latest "/bin/bash" About an hour ago Exited (0) 40 seconds ago brave_clarke
查看容器資源使用的一個簡單方式是經過 docker stats <container ID> | docker stats <NAMES>
[root@doc03 ~]# docker stats 67d2a66efa49 --no-stream CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 67d2a66efa49 brave_clarke 0.00% 528KiB / 31.26GiB 0.00% 648B / 0B 0B / 0B 1
● --no-stream
非動態展現容器資源信息
docker run <options> <image>:<tag> <service>
[root@doc03 ~]# docker run -itd --name centos_V4 centos:latest /bin/bash acfc8e209c303aac3329ce99e2b12b9f79d3b712c8f7cc2e70d36b8e63934e00 [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES acfc8e209c30 centos:latest "/bin/bash" 3 seconds ago Up 2 seconds centos_V4
● -d
後臺啓動容器,不會具有與容器交互性並終端進行鏈接的狀態
● --name
爲容器定製化惟一名稱
"attach"方式不作其餘說明
docker exec <options> <container ID> /bin/bash
[root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES acfc8e209c30 centos:latest "/bin/bash" 3 minutes ago Up 3 minutes centos_V4 [root@doc03 ~]# docker exec -it centos_V4 /bin/bash [root@acfc8e209c30 /]# pwd / [root@acfc8e209c30 /]# exit exit [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES acfc8e209c30 centos:latest "/bin/bash" 3 minutes ago Up 3 minutes centos_V4
"-itd"相似於容器先"stop"再"start",簡單說後臺運行一個容器則主進程處於一直運行的狀態,即便"exit"也不會致使容器中止。
docker inspect <container ID> | docker inspect <NAMES>
[root@doc03 ~]# docker inspect acfc8e209c30 --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 172.17.0.2 [root@doc03 ~]# docker inspect acfc8e209c30 --format='{{.Config.Cmd}}' [/bin/bash]
● --format
格式化容器某個信息,格式相似於Linux的"jq"
重啓策略應用與每一個容器
容器支持的重啓策略包括"always"、"unless-stopped"、"on-failed"
● always
# 會話1 [root@doc03 ~]# docker run -it --name centos_v2 --restart always centos:latest /bin/bash # 會話2 [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ac8096f2b1a centos:latest "/bin/bash" 23 seconds ago Up 22 seconds centos_v2 # 會話1 [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ac8096f2b1a centos:latest "/bin/bash" 25 seconds ago Up Less than a second centos_v2 [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ac8096f2b1a centos:latest "/bin/bash" 28 seconds ago Up 3 seconds centos_v2
--restart always有一個特性,當daemon進行重啓的時候,中止的容器也會從新啓動。例如建立一個容器並指定"--restart always",而後經過"docker stop"命令中止該容器。可是若是重啓daemon,該容器也會從新啓動
● unless-stopped
"always"和"unless-stopped"最大的區別,就是知道了"always"和"unless-stopped"並處於"Stop(Exited)"狀態的容器,不會在Docker
● on-failed
在退出容器且返回值不是0(異常退出)的時候,重啓容器。此場景不太好試下,不作過多說明。
若是要導出本地某個容器,可使用 docker export
[root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ac8096f2b1a centos:latest "/bin/bash" About an hour ago Up About an hour centos_v2 [root@doc03 ~]# docker export centos_v2 > centos_v2_image_20210414.tar [root@doc03 ~]# ll total 211456 -rw-r----- 1 root root 216525312 Apr 14 22:56 centos_v2_image_20210414.tar
可使用 docker import 從容器快照文件中再導入爲鏡像
cat container_export.tar | docker import - <repository>:<tag>
[root@doc03 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest f6d0b4767a6c 3 months ago 133MB centos latest 300e315adb2f 4 months ago 209MB [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@doc03 ~]# cat centos_v2_image_20210414.tar | docker import - centos:V2 sha256:9df8548e7d25ca0ca509181c362708e470e279c90829d381c05f4d6a824820e9 [root@doc03 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos V2 9df8548e7d25 9 seconds ago 209MB nginx latest f6d0b4767a6c 3 months ago 133MB centos latest 300e315adb2f 4 months ago 209MB
容器的命令支持不少參數,這裏只是把平常工做中使用到的說明一下。若想了解其餘參數的使用方式,能夠經過"help"命令獲取
● 獲取docker支持的指令
docker --help
● 獲取docker某個指令支持的參數
docker run --help