Docker常用命令,值得收藏

1。 操作容器

run

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG。。。]

使用指定的映象來執行容器,並可選地在容器中執行指定的命令。

分離模式

:透過

-d

選項指定;容器會在任務(程序)結束時退出。

前臺模式

:可以將控制檯連線到容器中程序的標準輸入、輸出、錯誤;透過

-t

選項可以為其分配一個偽終端;透過

-i

選項可以保持標準輸入處於開啟狀態。

——rm

選項能夠在容器退出時自動刪除容器。

[ming@localhost ~]$ sudo docker run -it ——rm ubuntu:latest /bin/bashroot@2258471ee542:/# lsbin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr varroot@2258471ee542:/# exitexit[ming@localhost ~]$ sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

ps

$ docker ps [OPTIONS]

羅列容器。

-a

選項可以列出所有的容器。

[ming@localhost ~]$ sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES83d375a4271d ubuntu:latest “top -b” 3 minutes ago Exited (0) 3 minutes ago stupefied_sammet

inspect

docker inspect [OPTIONS] CONTAINER [CONTAINER。。。]

檢視容器的詳細資訊。

[ming@localhost ~]$ sudo docker inspect 1f749a6ec815[ { “Id”: “1f749a6ec815b28cef0e94d1ad654c3240efd33d887fed563b32776724df9145”, “Created”: “2021-10-06T03:34:57。910631294Z”, 。。。 “State”: { “Status”: “running”, 。。。 “Pid”: 5512, “ExitCode”: 0, “Error”: “”, 。。。 }, “Image”: “sha256:597ce1600cf4ac5f449b66e75e840657bb53864434d6bd82f00b172544c32ee2”, 。。。 “LogPath”: “/var/lib/docker/containers/1f749a6ec815b28cef0e94d1ad654c3240efd33d887fed563b32776724df9145/1f749a6ec815b28cef0e94d1ad654c3240efd33d887fed563b32776724df9145-json。log”, “Name”: “/hungry_chandrasekhar”, 。。。 “GraphDriver”: { “Data”: { “LowerDir”: “/var/lib/docker/overlay2/bacb628d91b4725954c6371f1b5abb58047cc50abd01db2db3c55d0fd76756de-init/diff:/var/lib/docker/overlay2/b48052cfd14e2413218757fb03e0997a600912f9e29dc45db045c8d214fdf026/diff”, “MergedDir”: “/var/lib/docker/overlay2/bacb628d91b4725954c6371f1b5abb58047cc50abd01db2db3c55d0fd76756de/merged”, “UpperDir”: “/var/lib/docker/overlay2/bacb628d91b4725954c6371f1b5abb58047cc50abd01db2db3c55d0fd76756de/diff”, “WorkDir”: “/var/lib/docker/overlay2/bacb628d91b4725954c6371f1b5abb58047cc50abd01db2db3c55d0fd76756de/work” }, “Name”: “overlay2” }, “Mounts”: [], “Config”: { “Hostname”: “1f749a6ec815”, 。。。 “Cmd”: [ “top”, “-b” ], “Image”: “ubuntu:latest”, “Volumes”: null, “WorkingDir”: “”, “Entrypoint”: null, “OnBuild”: null, “Labels”: {} }, “NetworkSettings”: { 。。。 “Networks”: { “bridge”: { 。。。 “Gateway”: “172。17。0。1”, “IPAddress”: “172。17。0。2”, “IPPrefixLen”: 16, 。。。 “MacAddress”: “02:42:ac:11:00:02”, “DriverOpts”: null } } } }]

top

$ docker top CONTAINER [ps OPTIONS]

檢視容器中執行的程序。

[ming@localhost ~]$ sudo docker top 1f749a6ec815UID PID PPID C STIME TTY TIME CMDroot 5512 5492 0 23:46 ? 00:00:00 top -b

stats

$ docker stats [OPTIONS] [CONTAINER。。。]

持續輸出容器的資源使用情況。

[ming@localhost ~]$ sudo docker statsCONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDSc8dac7e11479 boring_shannon 0。06% 440KiB / 3。701GiB 0。01% 737B / 0B 0B / 0B 1^C

port

$ docker port CONTAINER [PRIVATE_PORT[/PROTO]]

檢視容器的埠對映。

# 將容器的 80/tcp 埠對映到主機的 8080 埠[ming@localhost ~]$ sudo docker run -d -p 8080:80/tcp ubuntu:latest top -bc8dac7e11479b8da9c467054a24da8c52ff28f2b687b501408f1d31fa3c7af98[ming@localhost ~]$ sudo docker port c8dac7e180/tcp -> 0。0。0。0:808080/tcp -> :::8080[ming@localhost ~]$ sudo docker port c8dac7e1 80/tcp0。0。0。0:8080:::8080

logs

$ docker logs [OPTIONS] CONTAINER

檢視容器的日誌(標準輸出、錯誤的內容)。

-f

選項可以持續輸出容器的日誌。

[ming@localhost ~]$ sudo docker logs 1f749a6ec815top - 03:34:58 up 25 min, 0 users, load average: 0。14, 0。08, 0。20Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie%Cpu(s): 6。7 us, 13。3 sy, 0。0 ni, 80。0 id, 0。0 wa, 0。0 hi, 0。0 si, 0。0 stMiB Mem : 3789。5 total, 1045。0 free, 852。5 used, 1891。9 buff/cacheMiB Swap: 3968。0 total, 3968。0 free, 0。0 used。 2669。9 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 5960 1716 1296 R 0。0 0。0 0:00。03 top。。。

attach

$ docker attach [OPTIONS] CONTAINER

將本地終端的標準輸入、輸出、錯誤連線到容器。

[ming@localhost ~]$ sudo docker run -d ubuntu:latest top -b83d375a4271d6fb4d340925d604771b408e12f00a40d639b7a6020a87291ffb8[ming@localhost ~]$ sudo docker attach 83d375a4271d6fb4d340925d604771b408e12f00a40d639b7a6020a87291ffb8top - 03:24:00 up 14 min, 0 users, load average: 0。11, 0。34, 0。36Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie%Cpu(s): 7。7 us, 3。4 sy, 0。0 ni, 88。9 id, 0。0 wa, 0。0 hi, 0。0 si, 0。0 stMiB Mem : 3789。5 total, 1034。7 free, 862。9 used, 1891。9 buff/cacheMiB Swap: 3968。0 total, 3968。0 free, 0。0 used。 2659。6 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 5960 1712 1296 R 0。0 0。0 0:00。04 top。。。

exec

$ docker exec [OPTIONS] CONTAINER COMMAND [ARG。。。]

在執行的容器中執行指定的命令。

[ming@localhost ~]$ sudo docker run -d ubuntu:latest top -b1f749a6ec815b28cef0e94d1ad654c3240efd33d887fed563b32776724df9145[ming@localhost ~]$ sudo docker exec -it 1f749a6e /bin/bashroot@1f749a6ec815:/# ps -elfF S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD4 S root 1 0 0 80 0 - 1490 poll_s 03:34 ? 00:00:00 top -b4 S root 7 0 0 80 0 - 1025 do_wai 03:35 pts/0 00:00:00 /bin/bash0 R root 17 7 0 80 0 - 1472 - 03:35 pts/0 00:00:00 ps -elf

pause, unpause

$ docker pause CONTAINER [CONTAINER。。。]

使用 freezer cgroup 掛起容器中的所有程序(程序對掛起操作是無感知的)。

$ docker unpause CONTAINER [CONTAINER。。。]

恢復容器中掛起的程序。

[ming@localhost ~]$ sudo docker pause 1f749a6ec8151f749a6ec815[ming@localhost ~]$ sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1f749a6ec815 ubuntu:latest “top -b” 6 minutes ago Up 6 minutes (Paused) hungry_chandrasekhar[ming@localhost ~]$ sudo docker unpause 1f749a6ec8151f749a6ec815[ming@localhost ~]$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1f749a6ec815 ubuntu:latest “top -b” 6 minutes ago Up 6 minutes hungry_chandrasekhar

stop

$ docker stop [OPTIONS] CONTAINER [CONTAINER。。。]

停止容器,終止容器中的程序:首先發送

SIGTERM

訊號給容器中的程序,一段時間之後傳送

SIGKILL

訊號。

[ming@localhost ~]$ sudo docker stop 1f749a6ec8151f749a6ec815[ming@localhost ~]$ sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1f749a6ec815 ubuntu:latest “top -b” 9 minutes ago Exited (0) 2 seconds ago hungry_chandrasekhar

start

$ docker start [OPTIONS] CONTAINER [CONTAINER。。。]

啟動停止的容器(還是執行之前給定的命令)。

[ming@localhost ~]$ sudo docker start 1f749a6ec8151f749a6ec815[ming@localhost ~]$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1f749a6ec815 ubuntu:latest “top -b” 11 minutes ago Up 2 seconds hungry_chandrasekhar

rm

$ docker rm [OPTIONS] CONTAINER [CONTAINER。。。]

刪除指定的容器。

——force

選項可以強制性刪除執行的容器。

[ming@localhost ~]$ sudo docker rm 83d375a4271d83d375a4271d

cp

$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-$ docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

在容器和主機之間複製檔案、目錄。

[ming@localhost ~]$ echo “hello” > hello。txt[ming@localhost ~]$ sudo docker cp hello。txt 1f749a6ec815:/root/[ming@localhost ~]$ sudo docker exec 1f749a6ec815 cat /root/hello。txthello

[ming@localhost ~]$ sudo docker cp 1f749a6ec815:/root/hello。txt 。[ming@localhost ~]$ cat hello。txt hello

export

$ docker export [OPTIONS] CONTAINER

將容器的檔案系統(不包括卷的內容)匯出為 tar 檔案,後續可透過

docker import

來載入映象。

[ming@localhost ~]$ sudo docker export -o ubuntu2。tar 1f749a6ec815[ming@localhost ~]$ ls -lh ubuntu2。tar -rw————-。 1 root root 72M Oct 6 03:00 ubuntu2。tar

2。 操作映象

images

$ docker images [OPTIONS] [REPOSITORY[:TAG]]

檢視所有的頂層映象。

-a

選項可以檢視所有的映象。

[ming@localhost ~]$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEubuntu latest 597ce1600cf4 5 days ago 72。8MB

search

$ docker search [OPTIONS] TERM

搜尋 docker hub。

[ming@localhost ~]$ sudo docker search centosNAME DESCRIPTION STARS OFFICIAL AUTOMATEDcentos The official build of CentOS。 6786 [OK] ansible/centos7-ansible Ansible on Centos7 135 [OK]consol/centos-xfce-vnc Centos container with “headless” VNC session… 130 [OK]jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 120 [OK]。。。

pull

$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]

拉取映象。

$ sudo docker pull debian:jessie

tag

$ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

基於源映象建立一個包含 tag 的映象。

$ sudo docker tag 0e5574283393 fedora/httpd:version1。0

push

$ docker push [OPTIONS] NAME[:TAG]

推送映象。

$ sudo docker image tag rhel-httpd:latest registry-host:5000/myadmin/rhel-httpd:latest$ sudo docker image push registry-host:5000/myadmin/rhel-httpd:latest

import

$ docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

從 tar 檔案中載入映象。

[ming@localhost ~]$ sudo docker import ubuntu2。tar ubuntu2:v1sha256:649f9cf75008bc2bf84cfa97a008883530b9384029a53e3d7f5262556e07fcae[ming@localhost ~]$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEubuntu2 v1 649f9cf75008 6 seconds ago 72。8MBubuntu latest 597ce1600cf4 5 days ago 72。8MB

save

$ docker save [OPTIONS] IMAGE [IMAGE。。。]

儲存映象為 tar 檔案,後續可透過

docker load

來載入。

可透過

-o

選項將映象儲存至指定的檔案,預設輸出到標準輸出。

[ming@localhost ~]$ sudo docker save ubuntu:latest | gzip > ubuntu3。tar。gz[ming@localhost ~]$ ls -hl ubuntu3。tar。gz -rw-rw-r——。 1 ming ming 27M Oct 6 03:17 ubuntu3。tar。gz

load

$ docker load [OPTIONS]

從標準輸入或 tar 檔案中載入映象。

-i

選項指定從 tar 檔案中載入映象。

[ming@localhost ~]$ sudo docker load -i ubuntu3。tar。gz Loaded image: ubuntu:latest

rmi

$ docker rmi [OPTIONS] IMAGE [IMAGE。。。]

刪除本地映象。如果

IMAGE

包含了 tag,且該映象具有多個 tags,則此命令只是移除該 tag,而不會刪除映象。

-f

選項可強制刪除執行容器所用的映象。

[ming@localhost ~]$ sudo docker rmi ubuntu2:v1Untagged: ubuntu2:v1Deleted: sha256:649f9cf75008bc2bf84cfa97a008883530b9384029a53e3d7f5262556e07fcaeDeleted: sha256:d01576ff475bf2c2cac6231b7c3e0c4b977b463238d23fdd70bceb911c3e1b04