笔者规划容器命令和模块部署分开来写,本节只是介绍容器的基本命令使用,下节介绍web示例的部署。nginx
查看本地的容器是经过 docker ps <options>web
[root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@doc03 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 299657e97c08 centos:latest "/bin/bash" 2 minutes ago Exited (127) 2 minutes ago trusting_darwin 67d2a66efa49 centos:latest "/bin/bash" 20 minutes ago Exited (0) 3 minutes ago brave_clarke 26e45c621b75 centos:latest "/bin/bash" 36 minutes ago Exited (127) 36 minutes ago peaceful_nobel [root@doc03 ~]# docker ps -a -n2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 299657e97c08 centos:latest "/bin/bash" 10 minutes ago Exited (127) 9 minutes ago trusting_darwin 67d2a66efa49 centos:latest "/bin/bash" 28 minutes ago Exited (0) 10 minutes ago brave_clarke
● -adocker
查看本地全部历史容器,包括已中止、异常、正常运行的容器vim
● -n2centos
列出最近建立的2个容器缓存
若不加"-a",则只会显示正在运行或一直进行重启的容器,不会显示中止容器bash
[root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
● CONTAINER IDless
容器对应且惟一的IDide
● IMAGEspa
依赖镜像,经过这个镜像来实例化一个容器
● 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/bash Unable to find image 'centos:latest' locally latest: Pulling from library/centos 7a0437f04f83: Pull complete Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: 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.txt bash: vim: command not found
在示例中,让容器运行Bash Shell(/bin/bash),这使得Bash Shell是容器中惟一运行的进程,能够经过"ps aux"查看
[root@67d2a66efa49 /]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 12012 2176 pts/0 Ss 13:31 0:00 /bin/bash root 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 /]# exit exit [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@doc03 ~]#
中止(关停)容器的一个简单方式是经过 docker stop <container ID> | docker stop <NAMES>
可经过"CONTAINER ID"或"NAMES"列对应的值来指定须要中止的容器
[root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a5023dce701 centos:latest "/bin/bash" 13 minutes ago Up 13 minutes determined_yalow [root@doc03 ~]# docker stop 6a5023dce701 6a5023dce701 [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
删除容器的一个简单方式是经过 docker rm <container ID> | docker rm <NAMES>
可经过"CONTAINER ID"或"NAMES"列对应的值来指定须要删除的容器,删除容器前必需要先"stop"对应容器,当前也可使用"--force"强制删除,但不建议
[root@doc03 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 299657e97c08 centos:latest "/bin/bash" 37 minutes ago Exited (127) 37 minutes ago trusting_darwin 67d2a66efa49 centos:latest "/bin/bash" About an hour ago Exited (0) 26 seconds ago brave_clarke 26e45c621b75 centos:latest "/bin/bash" About an hour ago Exited (127) About an hour ago peaceful_nobel [root@doc03 ~]# docker rm 26e45c621b75 26e45c621b75 [root@doc03 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 299657e97c08 centos:latest "/bin/bash" 37 minutes ago Exited (127) 37 minutes ago trusting_darwin 67d2a66efa49 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-stream CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 67d2a66efa49 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/bash acfc8e209c303aac3329ce99e2b12b9f79d3b712c8f7cc2e70d36b8e63934e00 [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES acfc8e209c30 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 ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES acfc8e209c30 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 /]# exit exit [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES acfc8e209c30 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 ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ac8096f2b1a centos:latest "/bin/bash" 23 seconds ago Up 22 seconds centos_v2 # 会话1 [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ac8096f2b1a centos:latest "/bin/bash" 25 seconds ago Up Less than a second centos_v2 [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ac8096f2b1a 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
● on-failed
在退出容器且返回值不是0(异常退出)的时候,重启容器。此场景不太好试下,不作过多说明。
若是要导出本地某个容器,可使用 docker export
[root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ac8096f2b1a 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 ~]# ll total 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 images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest f6d0b4767a6c 3 months ago 133MB centos latest 300e315adb2f 4 months ago 209MB [root@doc03 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@doc03 ~]# cat centos_v2_image_20210414.tar | docker import - centos:V2 sha256:9df8548e7d25ca0ca509181c362708e470e279c90829d381c05f4d6a824820e9 [root@doc03 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos V2 9df8548e7d25 9 seconds ago 209MB nginx latest f6d0b4767a6c 3 months ago 133MB centos latest 300e315adb2f 4 months ago 209MB
容器的命令支持不少参数,这里只是把平常工做中使用到的说明一下。若想了解其余参数的使用方式,能够经过"help"命令获取
● 获取docker支持的指令
docker --help
● 获取docker某个指令支持的参数
docker run --help