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