容器 - container基本介紹和命令示範(5)

筆者規劃容器命令和模塊部署分開來寫,本節只是介紹容器的基本命令使用,下節介紹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

相關文章
相關標籤/搜索