1. 程式人生 > 其它 >docker入門_image、container相關命令

docker入門_image、container相關命令

docker入門_image、container相關命令

映象倉庫服務、映象倉庫、映象相關概念

映象倉庫服務:docker映象倉庫服務、阿里雲映象服務

映象倉庫:docker映象倉庫服務中會有很多倉庫比如 docker官方倉庫、個人倉庫、微軟的映象倉庫

映象:映象就是沒啟動的容器(類似程式設計中的類、類似vmware中的iso檔案) 每個倉庫中可以有很多個映象

image 相關命令

  • 搜尋特定映象

    docker search apline
    ===============================================
    beginner@beginner-virtual-machine:~$ docker search alpine 
    NAME                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    alpine                                 A minimal Docker image based on Alpine Linux…   8311      [OK]       
    mhart/alpine-node                      Minimal Node.js built on Alpine Linux           486                  
    anapsix/alpine-java                    Oracle Java 8 (and 7) with GLIBC 2.28 over A…   478                  [OK]
    frolvlad/alpine-glibc                  Alpine Docker image with glibc (~12MB)          275                  [OK]
    alpine/git                             A  simple git container running in alpine li…   194                  [OK]
    gliderlabs/alpine                      Image based on Alpine Linux will help you wi…   185                  
    ============================================
    STARTS 星級越高映象一般會越好
    OFFICIAL 是否為官方
    
    只顯示官方映象
    docker search xxxx --filter "is-official=true"
    顯示官方映象並返回50行結果  最多返回100行
    docker search xxxx --filter "is-official=true" --limit 50
    
  • 拉取映象

    docker pull ubuntu:latest  # 從docker映象服務中拉取映象(也可以改成阿里雲等其他國內的) ubuntu(沒有字首說明是官方倉庫):latest(標籤表示最新的 但是不一定是真正最新的)  
    docker image ls # 檢視本地映象
    ================================================
    beginner@beginner-virtual-machine:~$ docker image ls
    REPOSITORY                TAG               IMAGE ID       CREATED         SIZE
    python3.8_zyh             3.0               21451ed8e840   16 hours ago    812MB
    python3.8_zyh             latest            c8ee23b16690   17 hours ago    422MB
    python3.8_zyh             1.0               a7abd70e6690   25 hours ago    180MB
    redis                     6.2.6             7614ae9453d1   2 weeks ago     113MB
    python                    3.8-slim-buster   5cc8cb0c433a   2 weeks ago     114MB
    ubuntu                    latest            ba6acccedd29   2 months ago    72.8MB
    redis                     latest            7faaec683238   2 months ago    113MB
    elasticsearch             7.7.0             7ec4f35ab452   20 months ago   757MB
    mobz/elasticsearch-head   5                 b19a5c98e43b   5 years ago     824MB
    ================================================
    
  • 欄位解釋

    • REPOSITORY:TAG 就是unbuntu:latest 之後可以通過這個組合進行容器的啟動
    • IMAGE ID 每個映象獨有的id 也可以通過id進行容器的啟動 例如docker run -it ba6 id不用拼完只需要前幾位是獨有的即可
    • CREATED 建立時間
    • SIZE 映象大小
  • 刪除映象

    docker image rm 映象id or(映象名:標籤)# 如果報錯可能是因為容器正在使用中 就算容器已停止但是沒刪除 也會無法讓你刪除映象
    ================================================
    beginner@beginner-virtual-machine:~$ docker image rm ubuntu:latest
    Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - container 2480cdd3277d is using its referenced image ba6acccedd29
    ================================================
    
    # 所以必須先刪除容器才能刪除映象
    docker container stop 2480cdd3277d
    docker container rm 2480cdd3277d   
    # 接下來就可以刪除映象了
    
  • 映象詳細資訊

    docker image inspect ubuntu:latest 
    ===============================================
    beginner@beginner-virtual-machine:~$ docker image inspect ubuntu:latest 
    [
        {
            "Id": "sha256:ba6acccedd2923aee4c2acc6a23780b14ed4b8a5fa4e14e252a23b846df9b6c1",
            "RepoTags": [
                "ubuntu:latest"
            ],
            "RepoDigests": [
                "ubuntu@sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322"
            ],
            "Parent": "",
            "Comment": "",
            "Created": "2021-10-16T00:37:47.578710012Z",
            "Container": "249e88be79ad9986a479c71c15a056946ae26b0c54c1f634f115be6d5f9ba1c8",
            "ContainerConfig": {
                "Hostname": "249e88be79ad",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "/bin/sh",
                    "-c",
                    "#(nop) ",
                    "CMD [\"bash\"]"
                ],
                "Image": "sha256:6c18a628d47eacf574eb93da2324293a0e6c845084cca2ea13efaa3cee4d0799",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
    ..........
    ===============================================
    以上是image的詳細資訊建立時間 執行的容器 還有 image會有多少層數(之後會有一篇隨筆專門講解現在只做瞭解 docker映象是分層的)
    

容器相關命令

  • 執行容器

    docker run -it ubuntu:latest  # -it是返回一個終端互動視窗  -d是後臺執行
    docker run -it  id
    # ctrl+P+Q 同時按可以從容器終端返回主機終端 如果直接exit 容器也會推出
    docker run -it  -name hello -p 6379:6379 -v 掛載卷 容器id
    # -name是給容器起一個名字 容器名叫hello   -p是對映埠 主機的埠號:docker容器的埠號
    # -v是掛載卷 可以方便修改配置檔案以及可持久化儲存 之後再詳細寫出
    
  • 檢視容器

    docker ps 與 docker container ls # 效果相同都可以列出正在執行的容器 個人傾向使用後者
    docker container ls -a # 列出所有容器包括已暫停的
    docker container ls -aq # 列出所有容器的id
    ===============================================
    beginner@beginner-virtual-machine:~$ docker container ls -aq
    2480cdd3277d
    beginner@beginner-virtual-machine:~$ docker container ls -a
    CONTAINER ID   IMAGE           COMMAND   CREATED       STATUS                      PORTS     NAMES
    2480cdd3277d   ubuntu:latest   "bash"    2 hours ago   Exited (1) 58 minutes ago             boring_dirac
    
    ===============================================
    
  • 連線容器

    docker  exec -it 容器id bash  # 連線容器時新開一個終端程序
    docker  exec -it boring_dirac bash # 用容器名稱連線 這裡連不上的因為容器停止了 只是舉個例子
    docker attach #attach到一個已經執行的容器的stdin,然後進行命令執行的動作。但是需要注意的是,如果從這個stdin中exit,會導致容器的停止
    
  • 將容器打包成映象

    docker commit (容器id or name)   test:latest    #將當前容器打包成一個叫test 標籤為latest的映象  
    
  • 停止容器

    docker container stop 容器id or 容器名 #停止容器
    docker container start 容器id or 容器名 #啟動容器
    
    當你停止之前給容器建立了一些檔案,你停止之後再次啟動 檔案是不會消失的
    
  • 刪除容器

    docker container stop 容器id or 容器名
    docker container rm 容器id or 容器名  #注意應該先停止後移除 雖然可以直接rm 但是給docker一些反應時間總歸是好的
    
    下面兩條命令是刪除全部容器
    docker container stop $(container ls -aq)
    docker container rm $(container ls -aq)
    
  • 容器生命週期

    容器內有程序容器就不會停止,如果沒有程序容器就會終止
    docker run -it ubuntu:latest  此時容器內有一個bash程序 如果exit 容器終止
    docker ctrl +q+p 切換回主機終端  容器bash程序在後臺執行
    docker exec -it 容器id bash    現在容器內有兩個程序 都是bash  如果當前使用exit 容器不會終止因為還有一個bash程序
    
    如果是docker attach  還是連線原來的那個程序 注意退出的時候要ctrl+p+q 因為只有一個程序 如果直接exit 容器也會停止
    
  • 容器重啟策略

    重啟策略包括 always、unless-stopped、on-field三種

    doceker container run --restart always sleep 10

    • always

      除非明確stop  否則一直存在
      當在bash中exit後容器停止 但因為是always 容器馬上後臺重啟
      當docker重啟時 即使之前stop過 容器也會啟動
      
    • unless-stopped

      與always最大的區別是當docker重啟時 之前stop過的容器不會啟動
      
    • on-field

      容器異常退出時(返回值不是0) 重啟容器
      在docker重啟時容器也會重啟