AI智能
改变未来

容器 – container基本介绍和命令示范(5)

笔者规划容器命令和模块部署分开来写,本节只是介绍容器的基本命令使用,下节介绍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

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 容器 – container基本介绍和命令示范(5)