笔者规划容器命令和模块部署分开来写,本节只是介绍容器的基本命令使用,下节介绍web示例的部署。
一. 查看运行的容器
查看本地的容器是通过 docker ps <options>
[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@doc03 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES299657e97c08 centos:latest \"/bin/bash\" 2 minutes ago Exited (127) 2 minutes ago trusting_darwin67d2a66efa49 centos:latest \"/bin/bash\" 20 minutes ago Exited (0) 3 minutes ago brave_clarke26e45c621b75 centos:latest \"/bin/bash\" 36 minutes ago Exited (127) 36 minutes ago peaceful_nobel[root@doc03 ~]# docker ps -a -n2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES299657e97c08 centos:latest \"/bin/bash\" 10 minutes ago Exited (127) 9 minutes ago trusting_darwin67d2a66efa49 centos:latest \"/bin/bash\" 28 minutes ago Exited (0) 10 minutes ago brave_clarke
● -a
查看本地所有历史容器,包括已停止、异常、正常运行的容器
● -n2
列出最近创建的2个容器
若不加\”-a\”,则只会显示正在运行或一直进行重启的容器,不会显示停止容器
二. 容器输出信息说明
[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
● CONTAINER ID
容器对应且唯一的ID
● IMAGE
依赖镜像,通过这个镜像来实例化一个容器
● COMMAND
显示容器内运行的主进程
● CREATED
显示容器被创建后截止到现在时间
● STATUS
Up X minutes
显示正常运行容器的运行时长
Exited X minutes ago
显示终止容器的退出时长
Up X minutes (Paused)
显示正常运行的容器处于暂停状态
● PORTS
显示容器内与本地端口映射关系,编排时在详细介绍
● NAMES
容器对应且唯一的名称
三. 启动一个简单的容器
启动容器的一个简单方式是通过 docker run <container ID> | docker run <NAMES>
基础的命令格式为
docker run <options> <image>:<tag> <service>
下面的命令启动了一个简单的容器,其中运行了容器化版本的CentOS Linux。
[root@doc03 ~]# docker run -it centos:latest /bin/bashUnable to find image \'centos:latest\' locallylatest: Pulling from library/centos7a0437f04f83: Pull complete Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1Status: Downloaded newer image for centos:latest[root@67d2a66efa49 /]#
● -it
使容器具备交互性并终端进行连接
● /bin/bash
指定在容器中运行的程序,后续会在\”容器进程\”中详细说明
当敲击回车之后,Docker客户端选择合适的API来调用Docker daemon。Docker daemon接收到命令并搜索Docker本地缓存,查看是否有命令所请求的镜像。在上面的示例中,本地缓存未找到该镜像,所以Docker接下来查询Docker Hub中是否有对应的镜像。找到该镜像后,Docker将镜像拉取到本地,存储在本地缓存当中。
一旦镜像拉取到本地,Docker daemon就创建容器并在其中运行指定的应用,细心的小伙伴会发现Shell提示符发生了变化。在上面的示例中,Shell提示符变更为\”root@67d2a66efa49 /\”,\”@\”之后的一长串数字就是容器唯一ID的前12个字符。
容器内的部分命令无法正常工作,个人理解容器内的应用是最小化安装。下面的示例就展示了2个命令—— 一条执行成功,一条执行失败
[root@67d2a66efa49 /]# pwd/[root@67d2a66efa49 /]# vim container.txtbash: vim: command not found
四. 容器进程
在示例中,让容器运行Bash Shell(/bin/bash),这使得Bash Shell是容器中唯一运行的进程,可以通过\”ps aux\”查看
[root@67d2a66efa49 /]# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 12012 2176 pts/0 Ss 13:31 0:00 /bin/bashroot 29 0.0 0.0 44620 1784 pts/0 R+ 13:43 0:00 ps aux
列表中的pid为\”1\”的进程就是Bash Shell进程,pid为\”29\”是输入命令产生的临时进程
这意味着输入\”exit\”会退出Bash Shell,那么容器也会退出(终止)。原因是容器如果不允许任何进程运行则无法存在————杀死Bash Shell即杀死了容器中唯一运行的进程,导致这个容器也会被杀死。说明白点杀死容器中的主进程,则容器也会被杀死,如下示例
[root@299657e97c08 /]# exitexit[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@doc03 ~]#
五. 停止容器
停止(关停)容器的一个简单方式是通过 docker stop <container ID> | docker stop <NAMES>
可通过\”CONTAINER ID\”或\”NAMES\”列对应的值来指定需要停止的容器
[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6a5023dce701 centos:latest \"/bin/bash\" 13 minutes ago Up 13 minutes determined_yalow[root@doc03 ~]# docker stop 6a5023dce7016a5023dce701[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
六. 删除容器
删除容器的一个简单方式是通过 docker rm <container ID> | docker rm <NAMES>
可通过\”CONTAINER ID\”或\”NAMES\”列对应的值来指定需要删除的容器,删除容器前必须要先\”stop\”对应容器,当前也可以使用\”–force\”强制删除,但不建议
[root@doc03 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES299657e97c08 centos:latest \"/bin/bash\" 37 minutes ago Exited (127) 37 minutes ago trusting_darwin67d2a66efa49 centos:latest \"/bin/bash\" About an hour ago Exited (0) 26 seconds ago brave_clarke26e45c621b75 centos:latest \"/bin/bash\" About an hour ago Exited (127) About an hour ago peaceful_nobel[root@doc03 ~]# docker rm 26e45c621b7526e45c621b75[root@doc03 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES299657e97c08 centos:latest \"/bin/bash\" 37 minutes ago Exited (127) 37 minutes ago trusting_darwin67d2a66efa49 centos:latest \"/bin/bash\" About an hour ago Exited (0) 40 seconds ago brave_clarke
七. 查看容器使用资源
查看容器资源使用的一个简单方式是通过 docker stats <container ID> | docker stats <NAMES>
[root@doc03 ~]# docker stats 67d2a66efa49 --no-streamCONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS67d2a66efa49 brave_clarke 0.00% 528KiB / 31.26GiB 0.00% 648B / 0B 0B / 0B 1
● –no-stream
非动态展示容器资源信息
八. 如何后台启动一个容器
docker run <options> <image>:<tag> <service>
[root@doc03 ~]# docker run -itd --name centos_V4 centos:latest /bin/bashacfc8e209c303aac3329ce99e2b12b9f79d3b712c8f7cc2e70d36b8e63934e00[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESacfc8e209c30 centos:latest \"/bin/bash\" 3 seconds ago Up 2 seconds centos_V4
● -d
后台启动容器,不会具备与容器交互性并终端进行连接的状态
● –name
为容器定制化唯一名称
\”attach\”方式不做其他说明
九. 如何重新连接一个容器
docker exec <options> <container ID> /bin/bash
[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESacfc8e209c30 centos:latest \"/bin/bash\" 3 minutes ago Up 3 minutes centos_V4[root@doc03 ~]# docker exec -it centos_V4 /bin/bash[root@acfc8e209c30 /]# pwd/[root@acfc8e209c30 /]# exitexit[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESacfc8e209c30 centos:latest \"/bin/bash\" 3 minutes ago Up 3 minutes centos_V4
\”-itd\”类似于容器先\”stop\”再\”start\”,简单说后台运行一个容器则主进程处于一直运行的状态,即使\”exit\”也不会导致容器停止。
十. 如何查看容器详情信息
docker inspect <container ID> | docker inspect <NAMES>
[root@doc03 ~]# docker inspect acfc8e209c30 --format=\'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}\'172.17.0.2[root@doc03 ~]# docker inspect acfc8e209c30 --format=\'{{.Config.Cmd}}\'[/bin/bash]
● –format
格式化容器某个信息,格式类似于Linux的\”jq\”
十一. 容器重启策略
重启策略应用与每个容器
容器支持的重启策略包括\”always\”、\”unless-stopped\”、\”on-failed\”
● always
# 会话1[root@doc03 ~]# docker run -it --name centos_v2 --restart always centos:latest /bin/bash# 会话2[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5ac8096f2b1a centos:latest \"/bin/bash\" 23 seconds ago Up 22 seconds centos_v2# 会话1[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5ac8096f2b1a centos:latest \"/bin/bash\" 25 seconds ago Up Less than a second centos_v2[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5ac8096f2b1a centos:latest \"/bin/bash\" 28 seconds ago Up 3 seconds centos_v2
–restart always有一个特性,当daemon进行重启的时候,停止的容器也会重新启动。例如创建一个容器并指定\”–restart always\”,然后通过\”docker stop\”命令停止该容器。但是如果重启daemon,该容器也会重新启动
● unless-stopped
\”always\”和\”unless-stopped\”最大的区别,就是同时指定了\”always\”和\”unless-stopped\”并处于\”Stop(Exited)\”状态的容器,不会在Docker daemon重启的时候被重启。有兴趣的小伙伴可以尝试下。
● on-failed
在退出容器且返回值不是0(异常退出)的时候,重启容器。此场景不太好模拟,不做过多说明。
十二. 容器快照
如果要导出本地某个容器,可以使用 docker export
[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5ac8096f2b1a centos:latest \"/bin/bash\" About an hour ago Up About an hour centos_v2[root@doc03 ~]# docker export centos_v2 > centos_v2_image_20210414.tar[root@doc03 ~]# lltotal 211456-rw-r----- 1 root root 216525312 Apr 14 22:56 centos_v2_image_20210414.tar
十三. 快照恢复镜像
可以使用 docker import 从容器快照文件中再导入为镜像
cat container_export.tar | docker import – <repository>:<tag>
[root@doc03 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest f6d0b4767a6c 3 months ago 133MBcentos latest 300e315adb2f 4 months ago 209MB[root@doc03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@doc03 ~]# cat centos_v2_image_20210414.tar | docker import - centos:V2sha256:9df8548e7d25ca0ca509181c362708e470e279c90829d381c05f4d6a824820e9[root@doc03 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos V2 9df8548e7d25 9 seconds ago 209MBnginx latest f6d0b4767a6c 3 months ago 133MBcentos latest 300e315adb2f 4 months ago 209MB
容器的命令支持很多参数,这里只是把日常工作中使用到的说明一下。若想了解其他参数的使用方式,可以通过\”help\”命令获取
● 获取docker支持的指令
docker –help
● 获取docker某个指令支持的参数
docker run –help