文章目錄
- 一.docker容器相關指令概述
- 二.生產環境中常用的 docker容器相關指令
- 1.創建容器(create)
- 2.查看已創建的容器(ps,ls,list)
- 3.運行一個已創建的容器(start)
- 4.停止一個正在運行的容器(stop)
- 5.重啟容器(restart)
- 6.創建并啟動一個容器(run,等效于"create + start")
- 7.刪除容器(rm)
- 8.進入容器并不創建新的終端(attach)
- 9.進入容器并創建新的終端(exec)
- 10.強殺容器(kill)
- 11.顯式正在運行的容器中進程信息(top)
- 12.對容器的名稱進行重命名(rename)
- 13.獲取容器的啟動日志(logs)
- 14.將宿主機的數據拷貝到虛擬機內(cp)
- 15.顯示容器資源使用統計信息的實時流(stats)
- 16.暫停容器運行(pause)
- 17.恢復容器運行(unpause)
- 18.阻止直到一個或多個容器停止,然后打印其出口代碼(wait)
- 19.將容器的文件系統導出為tar存檔(export)
- 20.列出端口映射或容器的特定映射(port)
- 21.顯示一個或多個容器的詳細信息(inspect)
- 22.更新一個或多個容器的配置(update)
- 23.根據容器的更改創建新圖像(commit)
- 24.檢查對容器文件系統上的文件或目錄所做的更改(diff)
- 三.關于容器的其它補充知識點
- 1.啟動容器時自定義初始化指令
- 2.啟動nginx是指定全局指令(global directives)概述
- 3.查看nginx容器的守護進程
- 作業:
- 四.使用xshell添加快速命令集
- 1.每次敲擊批量刪除所有容器比較繁瑣
- 2.啟用快速命令
- 3.創建快速命令集
- 五、docker容器重啟策略
一.docker容器相關指令概述
如下圖所示,均為docker容器相關的指令。但隨著我們對docker工具的熟練,基本上可以省略container子選項,但新手建議還是加上container選項。類似的,還有"docker image","docker network","docker volume"等,建議安裝docker的時候一并安裝上自動補全的功能喲~
二.生產環境中常用的 docker容器相關指令
1.創建容器(create)
[root@docker01 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.20.1 993ef3592f66 2 weeks ago 133MB
nginx latest d1a364dc548d 2 weeks ago 133MB
mysql latest c0cdc95609f1 4 weeks ago 556MB
centos 7 8652b9f0cb4c 7 months ago 204MB
[root@docker01 ~]#
[root@docker01 ~]# docker container create centos:7
b0a46280a223b9a006eadcb4d6c64bcbb6a4b973e54b3c67f0cd2b930d54dc6b
[root@docker01 ~]#
[root@docker01 ~]#
[root@docker01 ~]# docker container create mysql:latest
55fd7d0b64019facf444930db4e3eb2f64138249168e1e5b017c7df42c83dc49
[root@docker01 ~]#
[root@docker01 ~]#
[root@docker01 ~]# docker container create nginx:1.20.1
283020072fec486d189bafc2c0b423ad04836a8c636964ead11d7487356d2aaf
[root@docker01 ~]# docker container create nginx:1.14
[root@docker01 ~]# docker container create nginx
[root@docker01 ~]# docker container create centos:6
Unable to find image 'centos:6' locally
6: Pulling from library/centos
ff50d722b382: Pull complete
Digest: sha256:dec8f471302de43f4cfcf82f56d99a5227b5ea1aa6d02fa56344986e1f4610e7
Status: Downloaded newer image for centos:6
56ac0fdeffc677c7fa2e4065b02da0c3d41e99bea69cdd15089e736a61b93b18
[root@docker01 ~]#
[root@docker01 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.20.1 993ef3592f66 2 weeks ago 133MB
nginx latest d1a364dc548d 2 weeks ago 133MB
mysql latest c0cdc95609f1 4 weeks ago 556MB
centos 7 8652b9f0cb4c 7 months ago 204MB
centos 6 d0957ffdf8a2 2 years ago 194MB
[root@docker01 ~]# 溫馨提示:(1)如下圖所示,我們可以基于create指令來創建一個容器。(2)如果本地鏡像中有容器,則直接創建,如果本地沒有鏡像則會去官方下載相應的鏡像。
2.查看已創建的容器(ps,ls,list)
[root@docker01 ~]# docker container ps --helpUsage: docker container ls [OPTIONS]List containersAliases:ls, ps, listOptions:-a, --all Show all containers (default shows just running)-f, --filter filter Filter output based on conditions provided--format string Pretty-print containers using a Go template-n, --last int Show n last created containers (includes all states) (default -1)-l, --latest Show the latest created container (includes all states)--no-trunc Don't truncate output-q, --quiet Only display container IDs-s, --size Display total file sizes
[root@docker01 ~]#
[root@docker01 ~]# docker container ps -a -q # 查看所有的容器ID
4432a298dd5e
784c9a734d65
f5891c2cf303
4cf79bf37806
[root@docker01 ~]# [root@docker02 ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d8e670dae8a nginx:1.20.2 "/docker-entrypoint.…" About a minute ago Up 2 seconds 80/tcp ecstatic_cerf[root@docker02 ~]# docker container ps --no-trunc
相關字段說明:CONTAINER ID: 容器的唯一ID編號。IMAGE:鏡像的名稱COMMAND:容器的初始化命令,該命令和鏡像的默認設置有關,當然,在啟動容器時我們可以修改的。CREATED:創建的時間。STATUS:當前的狀態。PORTS:對外暴露的端口。NAMES:容器的名稱,若不指定,則docker引擎會自動幫咱們隨機生成一個容器名稱。
3.運行一個已創建的容器(start)
[root@docker01 ~]# docker container start b0a46280a223
b0a46280a223
[root@docker01 ~]# docker container ls
[root@docker01 ~]# docker container ls -a
[root@docker01 ~]# docker container start elastic_albattani
[root@docker01 ~]# docker container ls溫馨提示:容器剛剛創建時處于"Created"狀態,下圖還展示了退出狀態("Exited ...")和啟動狀態("Up ..")。
4.停止一個正在運行的容器(stop)
[root@docker01 ~]# docker container stop elastic_albattani
elastic_albattani
[root@docker01 ~]#
5.重啟容器(restart)
[root@docker01 ~]# docker container restart 283020072fec
[root@docker01 ~]# docker container ls
6.創建并啟動一個容器(run,等效于"create + start")
[root@docker01 ~]# docker container run -it --name buffes_kylin centos:7 常見的相關參數說明:-i:即"interactive",音標為[??nt?r??kt?v] ,表示交互式的類型。通常和"-t"選項搭配使用。-t:即"terminal",音標為[?t??m?nl],表示啟動一個終端。通常和"-i"選項搭配使用。-d:讓容器在后臺運行,默認情況下,容器是在前臺(當前終端)運行的,這意味著會阻塞當前終端。--name:創建容器時指定名稱。#指定端口映射
docker container run -d -p 8888:80 nginx:1.18#查看端口映射
docker container port elegant_kapitsa溫馨提示:docker run的時候,所有的參數,必須寫在鏡像名稱前面喲~
7.刪除容器(rm)
刪除容器時既可以基于容器ID刪除,也可以基于容器名稱刪除喲~當然,我們也可以批量刪除容器,如下所示:[root@docker01 ~]# docker container ps -a -q4432a298dd5e784c9a734d65f5891c2cf3034cf79bf37806[root@docker01 ~]# [root@docker01 ~]# docker container rm -f `docker container ps -a -q`4432a298dd5e784c9a734d65f5891c2cf3034cf79bf37806[root@docker01 ~]#[root@docker01 ~]# docker container ps -a -q[root@docker01 ~]#
8.進入容器并不創建新的終端(attach)
溫馨提示:退出該終端方式比較特殊,需要依次執行"ctrl + p","ctrl + q"。 生產環境中不推薦使用,忘記它吧。即了解即可。#放入后臺運行
docker container run -itd busybox:latest#進入
[root@docker01 ~]# docker container attach amazing_thompson[root@docker01 ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f2a16e0d601 centos:7 "/bin/bash" 27 minutes ago Up 10 seconds sharp_swirles
[root@docker01 ~]#
[root@docker01 ~]#
[root@docker01 ~]# docker container attach 3f2a16e0d601
[root@3f2a16e0d601 /]#
[root@3f2a16e0d601 /]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@3f2a16e0d601 /]#
[root@3f2a16e0d601 /]# uname -r
3.10.0-1160.el7.x86_64
[root@3f2a16e0d601 /]#
[root@3f2a16e0d601 /]# uname -m
x86_64
[root@3f2a16e0d601 /]#
[root@3f2a16e0d601 /]#
[root@3f2a16e0d601 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:36 pts/0 00:00:00 /bin/bash
root 19 1 0 06:37 pts/0 00:00:00 ps -ef
[root@3f2a16e0d601 /]#
[root@3f2a16e0d601 /]# echo "buffes kylin" > /dev/pts/0
buffes kylin
[root@3f2a16e0d601 /]#
[root@3f2a16e0d601 /]# read escape sequence
[root@docker01 ~]#
[root@docker01 ~]#
[root@docker01 ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f2a16e0d601 centos:7 "/bin/bash" 36 minutes ago Up 9 minutes sharp_swirles
[root@docker01 ~]# 我們分別開啟2個終端使用attach來連接同一個容器,竟然發現這兩個終端連接的是同一個容器
9.進入容器并創建新的終端(exec)
[root@docker01 ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f2a16e0d601 centos:7 "/bin/bash" 27 minutes ago Up 10 seconds sharp_swirles[root@docker01 ~]# docker container exec -it 3f2a16e0d601 /bin/bash
[root@3f2a16e0d601 /]# ps -ef
[root@3f2a16e0d601 /]# who
[root@3f2a16e0d601 /]# w#另起一個終端,查看
[root@docker01 ~]# docker container exec -it 3f2a16e0d601 /bin/bash
[root@3f2a16e0d601 /]# ps -ef
[root@3f2a16e0d601 /]# w
10.強殺容器(kill)
我們可以使用kill指令強行殺死某個正在運行的容器。
[root@docker01 ~]# docker container kill sharp_swirles
[root@docker01 ~]# docker container ps
11.顯式正在運行的容器中進程信息(top)
[root@docker01 ~]# docker container top b25c10758474
[root@docker01 ~]# docker container top sharp_swirles
[root@docker01 ~]# docker container ps -a我們可以基于容器名稱或者容器的ID查看相應容器中運行的進程。
12.對容器的名稱進行重命名(rename)
我們可以已創建的容器進行重命名操作但請注意,容器的命名規則為"[a-zA-Z0-9][a-zA-Z0-9_.-]",不要妄圖使用其它特殊符號[root@docker02 ~]# docker container ps[root@docker02 ~]# docker container rename ecstatic_cerf nginx-1.20.1[root@docker02 ~]# docker container rename sharp_swirles buffes_centos7[root@docker02 ~]# docker container ps[root@docker02 ~]# docker container rename b25c10758474 buffes_nginx1.20.1
13.獲取容器的啟動日志(logs)
[root@docker02 ~]# docker container logs -f -n 5 buffes_nginx1.20.1
[root@docker02 ~]# curl -I 172.17.0.3
[root@docker02 ~]# docker container inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' oldboy_nginx1.20.1 # 獲取容器的IP地址。
172.17.0.3
[root@docker02 ~]# #查看日志
docker container logs `docker container ps -lq`#查看訪問時間戳
docker container logs -f `docker ps -lq` -t#查看指定時間戳
docker container logs -f `docker ps -lq` -t --until 2025-03-23T15:06:16.698035350Z溫馨提示:建議進入到nginx的容器內查看其訪問日志,不難發現其就是一個符號鏈接喲。
使用 jq 獲取信息
yum install -y jq#取出容器id號碼
docker inspect oldboy_nginx_v2 |jq .[].Id
.[] 用于去掉最外層的[]的
.Id 取出{}中的鍵值#取出容器運行狀態
[root@docker01 ~]# docker inspect buffes_nginx_v2 | jq .[].State
[root@docker01 ~]# docker inspect buffes_nginx_v2 | jq .[].State.Status.[] 用于去掉最外層的[]的
.State 取出State部分內容
.Status 取出容器狀態#取出容器名字
docker inspect buffes_nginx_v2 | jq .[].Name "/buffes_nginx_v2"#取出容器ip地址
docker inspect buffes_nginx_v2 | jq .[].NetworkSettings.IPAddress#取出端口信息(了解)
docker inspect buffes_nginx_v2 | jq '.[].NetworkSettings.Ports."80/tcp"'docker inspect buffes_nginx_v2 |jq '.[].NetworkSettings.Ports."80/tcp"[]'docker inspect buffes_nginx_v2 |jq '.[].NetworkSettings.Ports."80/tcp"[0]'docker inspect buffes_nginx_v2 | jq '.[].NetworkSettings.Ports."80/tcp"[0].HostPort'
#或者
docker container inspect nginx | jq '.[].NetworkSettings.Ports."8080/tcp"[]'
14.將宿主機的數據拷貝到虛擬機內(cp)
我們可以輕松的將宿主機的
[root@docker01 ~]# docker container exec -it buffes_nginx1.20.1 bash
root@b25c10758474:/# ls /tmp/
root@b25c10758474:/# ls /tmp/etc/
[root@docker01 ~]# docker container cp -aL /etc/ buffes_nginx1.20.1:/tmp
15.顯示容器資源使用統計信息的實時流(stats)
[root@docker01 ~]# docker container stats -h
Flag shorthand -h has been deprecated, please use --helpUsage: docker container stats [OPTIONS] [CONTAINER...]Display a live stream of container(s) resource usage statisticsOptions:-a, --all Show all containers (default shows just running)--format string Pretty-print images using a Go template--no-stream Disable streaming stats and only pull the first result--no-trunc Do not truncate output
[root@docker01 ~]#
16.暫停容器運行(pause)
[root@docker01 ~]# docker container ps -a
[root@docker01 ~]# docker container pause buffes_nginx1.20.1
[root@docker01 ~]# docker container inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' buffes_nginx1.20.1
172.17.0.3
[root@docker01 ~]# curl 172.17.0.3
[root@docker01 ~]# docker container pause buffes_nginx1.20.1
[root@docker01 ~]# docker container ps -a
#容器暫停期間無法對外提供服務我們可以將容器暫停,但一旦將容器暫停,這也意味著該容器無法對外提供服務啦!值得注意的時,暫停容器運行,其狀態的時間并不會變動了,而是停在這一刻了。
17.恢復容器運行(unpause)
[root@docker01 ~]# docker container ps -a
[root@docker01 ~]# docker container unpause buffes_nginx1.20.1
[root@docker01 ~]# curl 172.17.0.3恢復容器運行后,其時間還是會接著暫停時間的容器開始計數喲~
18.阻止直到一個或多個容器停止,然后打印其出口代碼(wait)
[root@docker01 ~]# docker container ps#打開另外的終端
[root@docker01 ~]# docker container wait buffes_centos7[root@docker01 ~]# docker container stop buffes_centos7[root@docker01 ~]# docker container kill buffes_centos7
19.將容器的文件系統導出為tar存檔(export)
[root@docker01 /yinzhengjie]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b25c10758474 nginx:1.20.1 "/docker-entrypoint.…" 2 hours ago Up 50 minutes 80/tcp buffes_nginx1.20.1
[root@docker01 /yinzhengjie]#
[root@docker01 /yinzhengjie]# ll
總用量 0
[root@docker01 /yinzhengjie]#
[root@docker01 /yinzhengjie]# docker container export buffes_nginx1.20.1 -o buffes_nginx.tar.gz
[root@docker01 /yinzhengjie]#
[root@docker01 /yinzhengjie]# ll
總用量 184288
-rw------- 1 root root 188708864 6月 12 17:15 buffes_nginx.tar.gz
[root@docker01 /yinzhengjie]#
20.列出端口映射或容器的特定映射(port)
戰略性忽略,后面文章會逐步更新,加入更多的內容
#例子
[root@docker01 ~]# docker container port magical_keller
21.顯示一個或多個容器的詳細信息(inspect)
戰略性忽略,后面文章會逐步更新,加入更多的內容[root@docker01 ~]# docker container inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' buffes_app01#查看顯示ip
docker container inspect -f {{.NetworkSettings.Networks.bridge.IPAddress}} `docker container ps -lq`#測試curl一下
curl -I 172.17.0.2#測試使用參考官方文檔
[root@docker02 ~]# docker inspect --format='aaaaaa {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} bbbbb' ecstatic_cerf
aaaaaa 172.17.0.2 bbbbb推薦閱讀:https://docs.docker.com/engine/reference/commandline/inspect/
22.更新一個或多個容器的配置(update)
戰略性忽略,后面文章會逐步更新,加入更多的內容
#查看容器狀態,每秒顯示一次
[root@docker01 ~]# docker container stats --no-trunc magical_keller#查看容器狀態,只顯示一次
[root@docker01 ~]# docker container stats --no-stream magical_keller#內存資源進行限制
docker container update -m 20480000 --memory-swap 20480000 magical_keller
23.根據容器的更改創建新圖像(commit)
戰略性忽略,后面文章會逐步更新,加入更多的內容
24.檢查對容器文件系統上的文件或目錄所做的更改(diff)
戰略性忽略吧,后面文章會逐步更新,加入更多的內容
[root@docker01 ~]# docker conatiners ps
[root@docker01 ~]# docker conatiners diff -h
[root@docker01 ~]# docker conatiners diff buffes_nginx1.20.1 | head
三.關于容器的其它補充知識點
1.啟動容器時自定義初始化指令
[root@docker01 ~]# docker run -d -it centos:7 sleep 10
159c23951cf46b48d463a9a3220db9bd01854845d5ba4a1e00ca31a2a9a66646
[root@docker01 ~]# 我們的容器運行10秒后會自動退出,這和我們自定義的命令有關,因為我們自定義容器初始化指令是"sleep 10"。這意味著程序守護進程的程序10秒后會自動退出,從而容器也會跟隨著退出如果想要將容器放在后臺一直運行的話,那么容器的守護程序(初始化指令)必須能夠擁有阻塞當前終端的能力(比如"tail -100f /etc/resolv.conf"),否則容器就會退出
2.啟動nginx是指定全局指令(global directives)概述
[root@docker01 ~]# yum -y install epel-release
[root@docker01 ~]#
[root@docker01 ~]# yum -y install nginx(2)運行nginx,查看nginx默認的啟動用戶
[root@docker01 ~]# grep ^user /etc/nginx/nginx.conf
user nginx;
[root@docker01 ~]#
[root@docker01 ~]# vim /etc/nginx/nginx.conf # 將上面的user指令注釋掉!
[root@docker01 ~]#
[root@docker01 ~]# grep ^user /etc/nginx/nginx.conf
[root@docker01 ~]#
[root@docker01 ~]# useradd koboid
[root@docker01 ~]#
[root@docker01 ~]# nginx -g "user koboid;daemon off;" # 將nginx設置為"daemon off"則會阻塞當前終端(即前臺運行)
3.查看nginx容器的守護進程
[root@docker01 ~]# docker container exec -it b25c10758474 /bin/bash
root@b25c10758474:/#
root@b25c10758474:/# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@b25c10758474:/#
root@b25c10758474:/#
root@b25c10758474:/# apt-get update
Hit:1 http://security.debian.org/debian-security buster/updates InRelease
Hit:2 http://deb.debian.org/debian buster InRelease
Hit:3 http://deb.debian.org/debian buster-updates InRelease
Reading package lists... Done
root@b25c10758474:/#
root@b25c10758474:/#
root@b25c10758474:/# apt-get -y install procps
Reading package lists... Done
Building dependency tree
Reading state information... Done
procps is already the newest version (2:3.3.15-2).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
root@b25c10758474:/#
root@b25c10758474:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 07:33 pts/0 00:00:00 nginx: master process nginx -g daemon off;
nginx 25 1 0 07:33 pts/0 00:00:00 nginx: worker process
nginx 26 1 0 07:33 pts/0 00:00:00 nginx: worker process
root 34 0 0 07:38 pts/1 00:00:00 /bin/bash
root 295 34
作業:
(1)在Ubuntu,Windows操作系統部署docker環境;
(2)在CentOS系統中下載nginx:1.14,nginx:1.16,nginx:1.18,nginx:1.20.1并導出,將其批量導入到Ubuntu,windows的docker環境;
作業答案參考:
作業(2)答案
參考:Ubuntu安裝docker
https://blog.csdn.net/heyl163_/article/details/131503469docker鏡像加速配置
root@koboid:~# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]
}修改鏡像,換成。
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"features": {"buildkit": true},"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]
}#docker,windows。桌面軟件。下載4.9.1版本
https://docs.docker.com/desktop/release-notes/#4201
Windows操作系統部署docker環境,流程補充:
windows的docker桌面軟件需要勾選 “Expose daemon on tcp://localhost:2375 without TLS”
四.使用xshell添加快速命令集
1.每次敲擊批量刪除所有容器比較繁瑣
學習階段,每次敲擊"docker rm -f `docker ps -a -q`"是不是會覺得很煩呢?此時我們可以借助xshell工具來幫咱們實現一個快捷鍵。
2.啟用快速命令
依次點擊"查看" ---> "快速命令" ---> 顯示效果如下圖所示。
3.創建快速命令集
如下圖所示,雙擊標記的空白處,按照你的需求自定義指令即可,記得取消勾選"追加CR(A)"喲~
五、docker容器重啟策略
參考官方文檔:https://docs.docker.com/reference/cli/docker/container/run/#restart
[root@docker01 ~]# pstree -p