1. 程式人生 > 其它 >3.docker的常用命令

3.docker的常用命令

1.版本
    docker verison
2.docker常用資訊
    docker info
    
3.列出本地的映象
    [root@wmd03 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        8 months ago        13.3kB

映象的操作命令

1.列出本地所有的映象(含中間映像層)
[root@wmd03 ~]# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        8 months ago        13.3kB

2.只顯示映象的id
[root@wmd03 ~]# docker images -q
bf756fb1ae65

3.組合使用:檢視本地所有映象的id
[root@wmd03 ~]# docker images -qa
bf756fb1ae65


4.去docker官網查詢tomcat的資訊
[root@wmd03 ~]# docker search tomcat
NAME                          DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   2838                [OK]                
tomee                         Apache TomEE is an all-Apache Java EE certif…   83                  [OK]                
dordoka/tomcat                Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   55                                      [OK]
bitnami/tomcat                Bitnami Tomcat Docker Image                     36                                      [OK]
kubeguide/tomcat-app          Tomcat image for Chapter 1                      29                                      
consol/tomcat-7.0             Tomcat 7.0.57, 8080, "admin/admin"              17                                      [OK]
cloudesire/tomcat             Tomcat server, 6/7/8                            15                                      [OK]
aallam/tomcat-mysql           Debian, Oracle JDK, Tomcat & MySQL              13                                      [OK]
arm32v7/tomcat                Apache Tomcat is an open source implementati…   10                                      


5.只累出點贊數超過30的tomcat,點贊數越多,下載越多,也就越穩定
root@wmd03 ~]# docker search -s 30 tomcat
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat              Apache Tomcat is an open source implementati…   2838                [OK]                
tomee               Apache TomEE is an all-Apache Java EE certif…   83                  [OK]                
dordoka/tomcat      Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   55                                      [OK]
bitnami/tomcat      Bitnami Tomcat Docker Image 





6.下載映象
不指定版本號的話,下載的是最新的tomcat
下載指定版本號的話: docker pull tomcat:版本號
[root@wmd03 ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
57df1a1f1ad8: Pull complete 
71e126169501: Pull complete 
1af28a55c3f3: Pull complete 
03f1c9932170: Pull complete 
881ad7aafb13: Pull complete 
9c0ffd4062f3: Pull complete 
bd62e479351a: Pull complete 
48ee8bc64dbc: Pull complete 
07cb85cca4f0: Pull complete 
6a78fac8d191: Pull complete 
Digest: sha256:1bab37d5d97bd8c74a474b2c1a62bbf1f1b4b62f151c8dcc472c7d577eb3479d
Status: Downloaded newer image for tomcat:lates



7.刪除映象:
    1.
    [root@wmd03 ~]# docker rmi hello-world
    Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container ee6aeb6d745b is using its referenced image bf756fb1ae65
    2.強制刪除
    [root@wmd03 ~]# docker rmi -f  hello-world
    Untagged: hello-world:latest
    Untagged: hello-world@sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc
    Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
    3.批量刪除
     [root@wmd03 ~]# docker rmi -f  hello-world nginx   
    
    4.刪除所有的映象
         [root@wmd03 ~]# docker rmi -f ${docker images -q}
         
     5.刪除包含關鍵字的映象
         docker rmi --force `docker images | grep doss-api | awk '{print $3}'`    //其中doss-api為關鍵字

容器的操作命令

映象是容器的前提,有映象才能有容器:映象可以理解是類(模板),容器是例項(具體的物件例項)
測試:
1.從阿里雲上拉下一個centos系統
    [root@wmd03 ~]# docker pull centos
    Using default tag: latest
    latest: Pulling from library/centos
    3c72a8ed6814: Pull complete 
    Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
    Status: Downloaded newer image for centos:latest
    
    [root@wmd03 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    tomcat              latest              f796d3d2c195        12 days ago         647MB
    centos              latest              0d120b6ccaa8        6 weeks ago         215MB
    發現centos系統的大小和vmware虛擬機器的系統大小相差很大,vmware的系統最少4個g,
    這是因為docker上的centos映象是精簡版的,並沒有硬體的虛擬,是最精簡的linux系統

2.啟動下載的centos系統
    -it的意思是啟動並建立一個偽終端,實驗如下
    [root@wmd03 ~]# docker run -it 0d120b6ccaa8
    發現路徑在cenos系統的根目錄下,是因為現處於docker啟動的centos系統的偽終端裡
    [root@9988123a0072 /]# pwd
    /
    [root@9988123a0072 /]# ls 
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@9988123a0072 /]# 
    
    2.2指定名稱執行docker的centos
        [root@wmd03 ~]# docker run -it --name wmd03 centos
        這時,另建立一個連線執行:docker ps:發現names是自己建立的名稱
            [root@wmd03 ~]# docker ps
            CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
            93f13e82a6ba        centos              "/bin/bash"         22 seconds ago      Up 22 seconds                           wmd03


    3.退出容器
        3.1 exit 容器停止並退出
        3.2 ctrl+p+q 容器不停止退出
        
        
4.查詢執行的容器
    docker ps:查詢正在執行的容器
    docker ps -a:列出當前所有正在執行的容器+歷史上執行過的容器
    docker ps -l:顯示最近建立的容器
    docker ps -n:顯示最近幾個建立的容器
    docker ps -q:靜默模式,只顯示正在執行的容器的id號
    docker ps --no-trunc:不截斷輸出
    
    
5.docker 容器的啟動和重啟
    5.1查詢正在執行的docker,發現只有一個
        [root@wmd03 ~]# docker ps 
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                           wmd03
    5.2查詢曾經執行的兩個容器
        [root@wmd03 ~]# docker ps -n 2
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                                     wmd03
        9988123a0072        0d120b6ccaa8        "/bin/bash"         29 minutes ago      Exited (127) 15 minutes ago                       nostalgic_jennings
    5.3 啟動已停止的docker 容器:docker start id號
        [root@wmd03 ~]# docker start 9988123a0072
        9988123a0072
    5.4 檢視當前正在執行的docker容器,發現已經啟動
        [root@wmd03 ~]# docker ps
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                           wmd03
        9988123a0072        0d120b6ccaa8        "/bin/bash"         29 minutes ago      Up 6 seconds                            nostalgic_jennings
    5.5重啟docker容器
        [root@wmd03 ~]# docker restart 9988123a0072
        9988123a0072
        [root@wmd03 ~]# docker ps
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                           wmd03
        9988123a0072        0d120b6ccaa8        "/bin/bash"         29 minutes ago      Up 3 seconds                            nostalgic_jennings
        
6.docker容器的停止
    6.1 docker stop id號
    6.2強制關閉;docker kill id號
    
    
7.刪除docker容器的執行歷史
    7.1查詢當前正在執行的容器:發現沒有
        [root@wmd03 ~]# docker ps
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
        查詢歷史執行的2個容器
        [root@wmd03 ~]# docker ps -n 2
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         23 minutes ago      Exited (0) 32 seconds ago                       wmd03
        9988123a0072        0d120b6ccaa8        "/bin/bash"         38 minutes ago      Exited (0) 25 seconds ago                       nostalgic_jennings
    7.2 docker rm id號
        刪除9988123a0072的docker容器執行歷史
        [root@wmd03 ~]# docker rm 9988123a0072
        9988123a0072
        查詢歷史發現已經沒有該容器的執行歷史
        [root@wmd03 ~]# docker ps -n 2
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
        93f13e82a6ba        centos              "/bin/bash"         25 minutes ago      Exited (0) 2 minutes ago                       wmd03
        ee6aeb6d745b        bf756fb1ae65        "/hello"            2 hours ago         Exited (0) 2 hours ago                         romantic_thompson
    7.3強制刪除該容器的執行歷史(用於刪除沒有停止的容器歷史)
        docker rm -f id號
    7.4強制刪除所有容器的執行歷史(不管執行與否)    
        docker rm -f $(docker ps -q)
1.啟動docker容器
    docker run
                --name="容器新名字":為容器指定一個名稱
                -d:後臺執行容器,並返回容器ID,也即啟動守護式容器
                -i:以互動模式執行容器,通常以-t同時使用
                -t:為容器重新分配一個偽輸入終端,通常與-i同時使用
                -P:隨機埠對映
                -p:指定埠對映,有以下四種格式
                     ip:hostPort:containerPort
                    ip::containerPort
                    hostPort:containerPort
                    containerPort
        這裡需要注意的是: docker run -d centos(後臺執行)和docker run -it centos(作為互動式執行時的區別)
            [root@wmd03 ~]# docker run -d centos(以後臺執行程序,並返回一個序列號)
            e1599db736fea1ae078d6ee47360163d9cd3e101af4cc1f23971705e967459e8
            [root@wmd03 ~]# docker ps-->查詢當前正在執行的容器,發現並沒有centos的執行
            CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
            [root@wmd03 ~]# docker ps -n 2--->查詢容器的執行歷史,發現centos有執行過,但是關閉了
            CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
            e1599db736fe        centos              "/bin/bash"         29 seconds ago      Exited (0) 27 seconds ago                       vigilant_ardinghelli
            這是什麼原因呢:
                這裡需要一個很重要的點:docker容器後臺執行,就必須有一個前臺程序
                容器執行的命令,如果不是一些掛起的命令(top,tail等),就會自動退出
                
                這是docker的機制問題,例如以web容器,我們以ngix為例,正常情況下,我們啟動響應的service即可,例如:service nginx start
                但是這樣做,nigix為後臺程序模式執行,就導致docket前臺沒有可執行的應用
                這樣容器後臺啟動後,就會例即自殺,因為他覺得無事可做
                所以最佳的解決方案是:將你要執行的程式以前臺程序的方式執行
                


2.檢視容器日誌:
    docker -logs 
        -f 跟隨最新的時間列印
        -t  加入時間戳
        --tail 數字,顯示最後多少條
        容器id
        
        
3.解決1遺留的後臺執行問題:思路是,因沒有前臺程式導致容器的自殺,所以可以寫個死迴圈,不停的輸出日誌到控制檯,這就有了一個掛起程式了,也就是有了前臺,也就不會斷了
    不能使用:docker run -d centos
    使用:docker run -d centos /bin/sh -c "while true;do echo hello wmd;sleep 5;done"-->後面的意思是每隔5秒列印一次:hello wmd
    a4ced0fdefb91d49739f2942a6ece2cce54afbe259813e9aa140147bf8de441a
    [root@wmd03 ~]# docker ps--->查詢當前正在執行的容器,發現有centos
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    a4ced0fdefb9        centos              "/bin/sh -c 'while t…"   5 seconds ago       Up 4 seconds                            hardcore_tereshkova
    檢視日誌:
        1.-t
            [root@wmd03 ~]# docker logs -t a4ced0fdefb9
            2020-10-09T20:07:59.646584481Z hello wmd
            2020-10-09T20:08:04.847974447Z hello wmd
            2020-10-09T20:08:09.851195631Z hello wmd
            2020-10-09T20:08:14.862156606Z hello wmd
            發現5秒列印一次
        2.-f 不停的追加
             docker logs -t -f a4ced0fdefb9
             2020-10-09T20:07:59.646584481Z hello wmd
             2020-10-09T20:08:04.847974447Z hello wmd
             2020-10-09T20:08:09.851195631Z hello wmd
             2020-10-09T20:08:14.862156606Z hello wmd
             ...持續追加中
         3.--tail 數字:檢視最後幾條日誌
             [root@wmd03 ~]# docker logs -f -t --tail 4 a4ced0fdefb9
            2020-10-09T20:13:00.129713239Z hello wmd
            2020-10-09T20:13:05.132413634Z hello wmd
            2020-10-09T20:13:10.135802553Z hello wmd
            2020-10-09T20:13:15.146469641Z hello wmd

4.檢視docker 容器中的程序
    docker top 容器id
    [root@wmd03 ~]# docker top a4ced0fdefb9
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                3330                3318                0                   04:07               ?                   00:00:00            /bin/sh -c while true;do echo hello wmd;sleep 5;
    doneroot                3577                3330                0                   04:16               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=slee
    p /usr/bin/sleep 5
    

5.檢視容器內部細節: docker inspect 容器id  以json串的形式返回容器的詳細資訊
    [root@wmd03 ~]# docker inspect a4ced0fdefb9
        [
            {
                "Id": "a4ced0fdefb91d49739f2942a6ece2cce54afbe259813e9aa140147bf8de441a",
                "Created": "2020-10-09T20:07:59.279476217Z",
                "Path": "/bin/sh",
                "Args": [
                    "-c",
                    "while true;do echo hello wmd;sleep 5;done"
                ],
                "State": {
                    "Status": "running",
                    "Running": true,
                    "Paused": false,
                    "Restarting": false,
                    "OOMKilled": false,
                    "Dead": false,
                    "Pid": 3330,
                    "ExitCode": 0,
                    "Error": "",
                    "StartedAt": "2020-10-09T20:07:59.657832567Z",
                    "FinishedAt": "0001-01-01T00:00:00Z"
                },
        。。。。
        。。。。

        
                
6.如何重新進入容器
    1.docker attach 容器id(進入互動式頁面)
        6.1以互動式的形式執行centos
            [root@wmd03 ~]# docker run -it --name wmd centos
            [root@522e3c77fc0a /]# pwd
            /
            處於執行的centos容器中
        6.2:ctrl+p+q退出互動形式
        6.3查詢當前正在執行的容器:發現此時已經退到宿主機了,這時如何返回到互動呢
            [root@wmd03 ~]# docker ps
            CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
            522e3c77fc0a        centos              "/bin/bash"         26 seconds ago      Up 25 seconds                           wmd     
        6.4 docker attach 容器id
            [root@wmd03 ~]# docker attach 522e3c77fc0a
            [root@522e3c77fc0a /]# pwd
            /
            發現其進入了執行的centos容器中
    
    2.docker exec -it 容器id bashShell(進入容器中執行指令碼並返回,再退出互動,最終結果是退出互動)
        [root@wmd03 ~]# docker exec -it 522e3c77fc0a pwd
        /
        [root@wmd03 ~]# 
        執行了pwd並返回給宿主機,並且最終退出宿主機
        
        也可以進入:這是進入
            [root@wmd03 ~]# docker exec -it 522e3c77fc0a /bin/bash
            [root@522e3c77fc0a /]# pwd
            /
            [root@522e3c77fc0a /]# 
            
            
7.如何將docker容器中的檔案拷貝到宿主機上:docker cp 容器id:容器中檔案路徑 宿主機路徑
    [root@wmd03 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    522e3c77fc0a        centos              "/bin/bash"         25 minutes ago      Up 25 minutes                           wmd
    [root@wmd03 ~]# docker cp 522e3c77fc0a:/tmp/yum.log /root
    將centos容器中/tmp/yum.log檔案拷貝到宿主機的root目錄下