06-docker容器常用命令
文章目录
- 一.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