您的位置:首页 > 大数据 > 人工智能

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

2021-04-14 23:55 1326 查看

笔者规划容器命令和模块部署分开来写,本节只是介绍容器的基本命令使用,下节介绍web示例的部署。

一. 查看运行的容器

    查看本地的容器是通过 docker ps <options>

[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

    ● -a

        查看本地所有历史容器,包括已停止、异常、正常运行的容器

    ● -n2

        列出最近创建的2个容器

    若不加"-a",则只会显示正在运行或一直进行重启的容器,不会显示停止容器

二. 容器输出信息说明   

[root@doc03 ~]# docker ps
CONTAINER 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/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 daemon重启的时候被重启。有兴趣的小伙伴可以尝试下。

● 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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: