docker container/容器相關命令
容器相關命令
建立容器
使用 docker create [option]
命令建立一個容器,例如
$ docker create -it ubuntu:18.04 d25d8252253ad10f5c26dbc0b0bdf74b5135eb2eea539d196656d81a9061c0d2 # docker ps -a 檢視容器 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d25d8252253a ubuntu:18.04 "bash" 24 seconds ago Created compassionate_black
新建的容器,status = Create,處於停止狀態,可以使用 docker start
命令啟動它。
create 命令常用的可選的引數有
- -a:是否繫結到標準輸入、輸出和錯誤
- -d:是否在後臺執行容器,預設為否
- -i:保持標準輸入開啟,預設為false
- -P:是容器內部埠隨機對映到主機的某埠
- -p:指定對映到本地埠,例如,-p 11234-11240:1234-1240
- -t:是否分配一個偽終端,預設為false
- -v:掛載主機上的檔案捲到容器內
- --name:為容器指定名稱
啟動容器
使用 docker start container-id/container-name
命令啟動一個剛剛建立的容器 ,例如
$ docker start d25d8252253a
d25d8252253a
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d25d8252253a ubuntu:18.04 "bash" 13 minutes ago Up 54 seconds compassionate_black
啟動容器後,可以使用 docker ps
命令檢視到容器 d25d8252253a 狀態已經變成了啟動
新建並啟動容器
命令 docker run
命令等同於先執行 docker create
再執行 docker start
。例如,使用下面的命令輸出 Hello World!,之後容器會自動停止。
$ docker run ubuntu /bin/echo 'Hello World!'
Hello World!
$ docker ps -a
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5f5b35152ed ubuntu:18.04 "/bin/echo 'Hello Wo…" 10 seconds ago Exited (0) 9 seconds ago stoic_elion
d25d8252253a ubuntu:18.04 "bash" 18 minutes ago Up 5 minutes compassionate_black
可以看到剛剛執行 echo 命令的容器,狀態已經變成了 Exited
使用 docker run
命令,是按照以下的執行流程
- 如果映象不存在,會先從共有倉庫下載映象
- 分配一個檔案系統給容器,並在只讀映象層外掛載一層可讀寫層
- 從宿主主機的配置的網橋介面中橋接一個虛擬介面到容器中
- 從網橋的地址池中分配一個ip給容器
- 執行使用者指定的應用程式
- 執行完畢容器自動停止
下面的命令,啟動一個 bash 終端,允許使用者進行互動
$ docker run -it ubuntu:18.04 /bin/bash
root@6b4389195232:/#
# -t:分配一個偽終端
# -i:保持標準輸入開啟
# 可以輸入 Ctrl+d 或輸入 exit 命令來退出程式
檢視容器輸出
使用 docker logs
命令獲取容器輸出,例如
$ docker logs e5f5b35152ed
Hello World!
$ docker logs 6b4389195232
root@6b4389195232:/# man docker-run
bash: man: command not found
root@6b4389195232:/# exit
exit
root@6b4389195232:/# pwd
/
root@6b4389195232:/# ls
bin boot dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
root@6b4389195232:/# ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
13 pts/0 00:00:00 ps
root@6b4389195232:/# exit
支援以下選項
- --details:列印詳細資訊
- -f:保持持續輸出
- --since string:輸出某個時間開始的日誌,例如 --since 2021-01-01
- --tail string:輸出最近的若干日誌,例如 --tail 2
- -t:顯示時間戳資訊
- --until string:輸出某個時間之前的日誌
停止容器
暫停容器
例如,啟動一個容器,將其暫停
$ docker run --name test --rm -it ubuntu bash
root@6d65107c8001:/#
# 開啟一個新終端
$ docker pause test
test
# docker ps 檢視
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d65107c8001 ubuntu:18.04 "bash" 28 seconds ago Up 27 seconds (Paused) test
可以看到容器是啟動並且暫停狀態,且第一個終端無法處於無法輸入的狀態
# 使用該命令恢復暫停的容器
$ docker unpause test
恢復後,終端1恢復到可以輸入的正常狀態
終止容器
可以使用 docker stop[-t|--time[=10]
來終止一個執行的容器,該命令會首先向容器傳送 SIGTERM 訊號,等待一段時間後(預設為10秒),再發送 SIGKILL 訊號來終止容器,例如
$ docker stop test
test
此外,可以使用 docker kill
直接傳送 SIGKILL 訊號來強行終止容器,docker restart
會先終止容器,再啟動容器
進入容器
在啟動容器時,使用 -d 選項,會使容器在後臺執行,使用者無法看到容器內的輸入也無法進行操作,這是有兩個命令可以進入容器,分別是 attach 和 exec 名命令
-
attach 命令
$ docker attach [option] container
這個命名主要支援三個選項,非別是:
- --detach-keys=[]:指定退出 attach 模式的快捷鍵序列,預設是 ctrl + q 和 ctrl + p
- --no-stdin=true|false:是否關閉標準輸入,預設是false
- --sig-proxy=true|false:是否代理收到的系統訊號給應用程序,預設為true
attach 有一個特點,當多個視窗使用 attach 進入同一個容器時,所有的視窗都會同步顯示,當一個建立因為命令阻塞了,所有的視窗都會無法操作
-
exec 命令
$ docker exec [option] container
比較重要的選項有
- -d:在容器後臺執行命令
- --detack-keys="":指定容器切回後臺的按鍵
- -e,--env=[]:指定環境變了列表
- -i:開啟標準輸入接收使用者輸入的命令,預設為 false
- --privileged=true|false:是否給執行命令以最高許可權,預設false
- -t:分配偽終端
- -t,--user:執行命令的使用者名稱
例如,進入剛剛建立的容器
$ docker run --name test -itd ubuntu:18.04 1647d13558f7d8b7a03f7abbc27414e6f7befa5a6c64a3257210f6755fdcadc6 $ docker exec -it test bash root@1647d13558f7:/#
刪除容器
使用 docker [container] rm [option]
命令來刪除容器
支援的選項有
- -f:強制刪除執行中的容器,會先發送 SIGKILL 訊號給容器,再進行刪除
- -l:刪除容器的連線,但保留容器
- -v:刪除容器掛載的資料卷
例如
$ docker create --name ubuntu-1 -it ubuntu:18.04
daf29b04546cbc2ce21b397c8ebbdec92458a6b40361fe1e3c6cc457a76cb5f8
$ docker rm ubuntu-1
ubuntu-1
匯入和匯出容器
匯出容器
匯出容器,是把一個已經建立的容器匯出到一個檔案中,命令為
$ docker export -o outputfile container
例如
$ create --name ubuntu-1 -it ubuntu:18.04
6294e0db7bf07f0a7e08f098bb44109e5635ec7e959b8340eb822f6236b2a66f
$ export -o ubuntu-1.tar ubuntu-1
$ ls -lh
-rw------- 1 linchangkun staff 56M 10 21 00:36 ubuntu-1.tar
匯入容器
將匯出的容器,可以複製到其他的機器上,匯入後會變為映象,命令為
$ docker import file REPOSITORY[:TAG]
例如
$ docker import ubuntu-1.tar test/u:0.1
sha256:9036cbb933c7dfa3e8e96ec1c5d54b55a9374930089a15198471903e506a6208
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/u 0.1 9036cbb933c7 3 minutes ago 56.6MB
匯出容器再匯入成為映象,會丟失元資訊和歷史
檢視容器
-
檢視容器詳情
使用
docker inspect container
檢視容器詳情,會以 json 格式返回容器id、建立時間、路徑、狀態等資訊$ docker inspect ubuntu-1 [ { "Id": "6294e0db7bf07f0a7e08f098bb44109e5635ec7e959b8340eb822f6236b2a66f", "Created": "2021-10-20T16:35:38.685585044Z", "Path": "bash", "Args": [], "State": { "Status": "exited", "Running": false, "Paused": false, "Restarting": false, "OOMKilled": false, ......
-
檢視容器內程序
使用
docker top container
檢視容器內程序$ docker top ubuntu-1 UID PID PPID C STIME TTY TIME CMD root 3612 3587 0 07:46 ? 00:00:00 bash root 3650 3612 0 07:46 ? 00:00:00 top
-
檢視統計資訊
使用
docker stats container
可以檢視統計資訊,會顯示cpu、記憶體、儲存、網路等使用情況的統計資訊$ docker stats ubuntu-1 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 6294e0db7bf0 ubuntu-1 0.00% 1.27MiB / 1.942GiB 0.06% 1.16kB / 0B 0B / 0B 2
其他容器命令
複製檔案
使用 docker cp
可以在容器和物理機之間複製檔案
$ ll
total 354488
-rw-r--r-- 1 linchangkun staff 0B 10 24 15:54 2.txt
# 複製本地檔案到容器
$ docker cp ./2.txt ubuntu-1:/
# 進入容器檢視
$ docker start -i ubuntu-1
root@6294e0db7bf0:/# ls
2 bin dev hello lib mnt proc run srv tmp var
2.txt boot etc home media opt root sbin sys usr
# 複製容器內檔案到本地
$ docker cp ubuntu-1:/3.txt .
$ ls -l
total 354488
-rw-r--r-- 1 linchangkun staff 0 10 24 15:54 2.txt
-rw-r--r-- 1 linchangkun staff 0 10 24 15:57 3.txt
支援的選項有
- -L:跟隨軟連線。預設當原路徑是軟連線時,預設只複製連結資訊,該選項會複製包含連結內容
檢視容器變更
使用 docker diff container
檢視容器內檔案變更
$ docker diff ubuntu-1
A /3.txt
A /hello
A /2.txt
A /2
C /root
A /root/.bash_history
檢視埠對映
使用 docker port container
命名可以檢視容器埠對映
$ docker run --name ubuntu-2 -it -p 80:80 ubuntu:18.04
$ docker port ubuntu-2
80/tcp -> 0.0.0.0:80
更新容器配置
使用 docker update container
命令可以更新容器資源限制配置,比如,cpu核心數、允許使用記憶體大小、io速度等等