本文最后更新于 257 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com
docker容器常用命令
一.docker容器相关指令概述
如下图所示,均为docker容器相关的指令。但随着我们对docker工具的熟练,基本上可以省略container子选项,但新手建议还是加上container选项。
类似的,还有"docker image","docker network","docker volume"等,建议安装docker的时候一并安装上自动补全的功能哟~
二.生产环境中常用的 docker容器相关指令
1.创建容器(create)
[root@docker201.oldboyedu.com ~]# 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@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# docker container create centos:7
b0a46280a223b9a006eadcb4d6c64bcbb6a4b973e54b3c67f0cd2b930d54dc6b
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# docker container create mysql:latest
55fd7d0b64019facf444930db4e3eb2f64138249168e1e5b017c7df42c83dc49
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# docker container create nginx:1.20.1
283020072fec486d189bafc2c0b423ad04836a8c636964ead11d7487356d2aaf
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# 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@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# 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@docker201.oldboyedu.com ~]#
温馨提示:
(1)如下图所示,我们可以基于create指令来创建一个容器。
(2)如果本地镜像中有容器,则直接创建,如果本地没有镜像则会去官方下载相应的镜像。
2.查看已创建的容器(ps,ls,list)
[root@docker201.oldboyedu.com ~]# docker container ps --help
Usage: docker container ls [OPTIONS]
List containers
Aliases:
ls, ps, list
Options:
-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@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# docker container ps -a -q # 查看所有的容器ID
4432a298dd5e
784c9a734d65
f5891c2cf303
4cf79bf37806
[root@docker201.oldboyedu.com ~]#
相关字段说明:
CONTAINER ID:
容器的唯一ID编号。
IMAGE:
镜像的名称
COMMAND:
容器的初始化命令,该命令和镜像的默认设置有关,当然,在启动容器时我们时可以修改的。
CREATED:
创建的时间。
STATUS:
当前的状态。
PORTS:
对外暴露的端口。
NAMES:
容器的名称,若不指定,则docker引擎会自动帮咱们随机生成一个容器名称。
温馨提示:
如下图所示,其中"ls", "ps", "list"均是别名信息哟~用哪个都成。
3.运行一个已创建的容器(start)
[root@docker201.oldboyedu.com ~]# docker container start b0a46280a223
b0a46280a223
[root@docker201.oldboyedu.com ~]#
如下图所示,我们基于已创建的容器名称或者其容器ID来启动一个容器。
温馨提示:
容器刚刚创建时处于"Created"状态,下图还展示了退出状态("Exited ...")和启动状态("Up ..")。
4.停止一个正在运行的容器(stop)
[root@docker201.oldboyedu.com ~]# docker container stop elastic_albattani
elastic_albattani
[root@docker201.oldboyedu.com ~]#
如下图所示,我们可以将正在运行的容器将其停止。
5.重启容器(restart)
如下图所示,我们可以重启一个容器。
6.创建并启动一个容器(run,等效于"create + start")
[root@docker201.oldboyedu.com ~]# docker container run -it --name oldboyedu_linux centos:7
常见的相关参数说明:
-i:
即"interactive",音标为[ˌɪntərˈæktɪv] ,表示交互式的类型。
通常和"-t"选项搭配使用。
-t:
即"terminal",音标为[ˈtɜːmɪnl],表示启动一个终端。
通常和"-i"选项搭配使用。
-d:
让容器在后台运行,默认情况下,容器是在前台(当前终端)运行的,这意味着会阻塞当前终端。
--name:
创建容器时指定名称。
温馨提示:
docker run的时候,所有的参数,必须写在镜像名称前面哟~
7.删除容器(rm)
如下图所示,删除容器时既可以基于容器ID删除,也可以基于容器名称删除哟~
当然,我们也可以批量删除容器,如下所示:
[root@docker201.oldboyedu.com ~]# docker container ps -a -q
4432a298dd5e
784c9a734d65
f5891c2cf303
4cf79bf37806
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# docker container rm -f `docker container ps -a -q`
4432a298dd5e
784c9a734d65
f5891c2cf303
4cf79bf37806
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# docker container ps -a -q
[root@docker201.oldboyedu.com ~]#
8.进入容器并不创建新的终端(attach)
温馨提示:
退出该终端方式比较特殊,需要依次执行"ctrl + p","ctrl + q"。
生产环境中不推荐使用,忘记它吧。即了解即可。
[root@docker201.oldboyedu.com ~]# 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@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# 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 "oldboyedu linux" > /dev/pts/0
oldboyedu linux
[root@3f2a16e0d601 /]#
[root@3f2a16e0d601 /]# read escape sequence
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# 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@docker201.oldboyedu.com ~]#
如下图所示,我们分别开启2个终端使用attach来连接同一个容器,竟然发现这两个终端连接的是同一个容器哟~
9.进入容器并创建新的终端(exec)
如下图所示,我们可以进入到正在运行的容器。
10.强杀容器(kill)
如下图所示,我们可以使用kill指令强行杀死某个正在运行的容器。
11.显式正在运行的容器中进程信息(top)
[root@docker201.oldboyedu.com ~]# docker container top b25c10758474
如下图所示,我们可以基于容器名称或者容器的ID查看相应容器中运行的进程。
12.对容器的名称进行重命名(rename)
如下图所示,我们可以已创建的容器进行重命名操作哟~
但请注意,容器的命名规则为"[a-zA-Z0-9][a-zA-Z0-9_.-]",不要妄图使用其它特殊符号哟~
13.获取容器的启动日志(logs)
[root@docker201.oldboyedu.com ~]# docker container logs -f -n 5 oldboy_nginx1.20.1
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# docker container inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' oldboy_nginx1.20.1 # 获取容器的IP地址。
172.17.0.3
[root@docker201.oldboyedu.com ~]#
如下图所示,我们可以查看到访问容器服务的日志信息哟~
温馨提示:
建议进入到nginx的容器内查看其访问日志,不难发现其就是一个符号链接哟。
14.将宿主机的数据拷贝到虚拟机内(cp)
如下图所示,我们可以轻松的将宿主机的
15.显示容器资源使用统计信息的实时流(stats)
[root@docker201.oldboyedu.com ~]# docker container stats -h
Flag shorthand -h has been deprecated, please use --help
Usage: docker container stats [OPTIONS] [CONTAINER...]
Display a live stream of container(s) resource usage statistics
Options:
-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@docker201.oldboyedu.com ~]#
16.暂停容器运行(pause)
[root@docker201.oldboyedu.com ~]# docker container pause oldboy_nginx1.20.1
如下图所示,我们可以将容器暂停,但一旦将容器暂停,这也意味着该容器无法对外提供服务啦!
值得注意的时,暂停容器运行,其状态的时间并不会变动了,而是停在这一刻了。
17.恢复容器运行(unpause)
[root@docker201.oldboyedu.com ~]# docker container unpause oldboy_nginx1.20.1
如下图所示,恢复容器运行后,其时间还是会接着暂停时间的容器开始计数哟~
18.阻止直到一个或多个容器停止,然后打印其出口代码(wait)
[root@docker201.oldboyedu.com ~]# docker container wait oldboy_centos7
19.将容器的文件系统导出为tar存档(export)
[root@docker201.oldboyedu.com /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 oldboy_nginx1.20.1
[root@docker201.oldboyedu.com /yinzhengjie]#
[root@docker201.oldboyedu.com /yinzhengjie]# ll
总用量 0
[root@docker201.oldboyedu.com /yinzhengjie]#
[root@docker201.oldboyedu.com /yinzhengjie]# docker container export oldboy_nginx1.20.1 -o oldboy_nginx.tar.gz
[root@docker201.oldboyedu.com /yinzhengjie]#
[root@docker201.oldboyedu.com /yinzhengjie]# ll
总用量 184288
-rw------- 1 root root 188708864 6月 12 17:15 oldboy_nginx.tar.gz
[root@docker201.oldboyedu.com /yinzhengjie]#
温馨提示:
如下图所示,可以导出来完哟~
20.列出端口映射或容器的特定映射(port)
战略性忽略,后期讲解网络映射后在进行讲解!
21.显示一个或多个容器的详细信息(inspect)
战略性忽略,等学完后面的内容后在进行讲解。
[root@docker201.oldboyedu.com ~]# docker container inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' oldboy_app01
推荐阅读:
https://docs.docker.com/engine/reference/commandline/inspect/
22.更新一个或多个容器的配置(update)
战略性忽略,后期找一个案例测试。
23.根据容器的更改创建新图像(commit)
战略性忽略,后期讲解自定义镜像时在进行集中讲解。
24.检查对容器文件系统上的文件或目录所做的更改(diff)
检查效果如下图所示,战略性忽略吧,目前感觉它的用处并不大。
三.关于容器的其它补充知识点
1.启动容器时自定义初始化指令
[root@docker201.oldboyedu.com ~]# docker run -d -it centos:7 sleep 10
159c23951cf46b48d463a9a3220db9bd01854845d5ba4a1e00ca31a2a9a66646
[root@docker201.oldboyedu.com ~]#
如下图所示,我们的容器运行10秒后会自动退出,这和我们自定义的命令有关,因为我们自定义容器初始化指令是"sleep 10"。这意味着程序守护进程的程序10秒后会自动退出,从而容器也会跟随着退出哟~
如果想要将容器放在后台一直运行的话,那么容器的守护程序(初始化指令)必须能够拥有阻塞当前终端的能力(比如"tail -100f /etc/resolv.conf"),否则容器就会退出哟。
2.启动nginx是指定全局指令(global directives)概述
(1)安装nginx
[root@docker201.oldboyedu.com ~]# yum -y install epel-release
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# yum -y install nginx
(2)运行nginx,查看nginx默认的启动用户
[root@docker201.oldboyedu.com ~]# grep ^user /etc/nginx/nginx.conf
user nginx;
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# vim /etc/nginx/nginx.conf # 将上面的user指令注释掉!
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# grep ^user /etc/nginx/nginx.conf
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# useradd oldboy
[root@docker201.oldboyedu.com ~]#
[root@docker201.oldboyedu.com ~]# nginx -g "user oldboy;daemon off;" # 将nginx设置为"daemon off"则会阻塞当前终端(即前台运行)哟~
3.查看nginx容器的守护进程
[root@docker201.oldboyedu.com ~]# 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
四.使用xshell添加快速命令集
1.每次敲击批量删除所有容器比较繁琐
如下图所示,学习阶段,每次敲击"docker rm -f `docker ps -a -q`"是不是会觉得很烦呢?
此时我们可以借助xshell工具来帮咱们实现一个快捷键。
2.启用快速命令
依次点击"查看" ---> "快速命令" ---> 显示效果如下图所示。
3.创建快速命令集
如下图所示,双击标记的空白处,按照你的需求自定义指令即可,记得取消勾选"追加CR(A)"哟~