docker images 指令筆記

最近內部的 docker registry 在團隊努力地開發下,images 增長的速度相當地快速,不僅讓空間消耗快速,也讓整個 docker registry 顯得雜亂,於是我就在調整 docker registry 的 image 清除作業,在實際開發相關功能前花了不少時間建立本機的環境,避免對團隊的 docker registry 造成影響,過程中反覆要操作 image 相關指令,趁機筆記一下

基本環境說明

  1. macOS Mojave 10.14.6
  2. docker for mac 2.1.0.1 (37199)

關於 docker images 指令

  • 指令用法

    docker images [OPTIONS] [REPOSITORY[:TAG]]
    
  • 指令可用選項

    Name, shorthandDescription
    –all , -a顯示所有 images (不加這個選項,預設不會顯示中繼 images : repository 跟 tag 都為 <none>)
    –digests顯示 image 的 digests
    –filter , -f依條件過濾 image
    –format使用 Go template 來格式化 image 的顯示資訊
    –no-trunc顯示完整 image 資訊
    –quiet , -q只顯示 images id
  1. --all , -a

    會顯示 repository 與 tag 為 <none> 的 image

    1docker-images-all

  2. --digests

    增加顯示 digestdigest 是從 Docker 1.6.0 與 registry 2 開始加入用來識別 image 內容的 sha 值

    2digests

  3. --filter , -f

    可用的 filter

    • dangling (boolean - true or false)

      用來過濾 images 是否有 tag (個人實測 - 只針對 tag : 只有 tag 為 none 會被列出,repository 為 none 的不會列出來)

      docker images -f dangling=true
      

      3filterdangling

      可使用下列語法直接刪除未被 tag 的 images

      docker rmi $(docker images -f "dangling=true" -q)
      

      4deletebydangling

    • label

      • label=<key>

        具有指定 label 的 image

        docker images -f "label=org.label-schema.name"
        

        8filterlabel

      • label=<key>=<value>

        具有指定 label 且 value 為指定內容的 image

        docker images -f "label=org.label-schema.name=kafka"
        

        9filterlabelvalue

    • before

      僅列出在指定的 <image-name>[:<tag>] , <image id> or <image@digest> 之前建立的 image

      $ docker images
      
      REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
      image1              latest              eeae25ada2aa        4 minutes ago        188.3 MB
      image2              latest              dea752e4e117        9 minutes ago        188.3 MB
      image3              latest              511136ea3c5a        25 minutes ago       188.3 MB
      
      $ docker images --filter "before=image1"
      
      REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
      image2              latest              dea752e4e117        9 minutes ago        188.3 MB
      image3              latest              511136ea3c5a        25 minutes ago       188.3 MB
      
    • since

      僅列出在指定的 <image-name>[:<tag>] , <image id> or <image@digest> 之後建立的 image

      $ docker images
      
      REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
      image1              latest              eeae25ada2aa        4 minutes ago        188.3 MB
      image2              latest              dea752e4e117        9 minutes ago        188.3 MB
      image3              latest              511136ea3c5a        25 minutes ago       188.3 MB
      
      $ docker images --filter "since=image3"
      REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
      image1              latest              eeae25ada2aa        4 minutes ago        188.3 MB
      image2              latest              dea752e4e117        9 minutes ago        188.3 MB
      
    • reference

      依指定的 pattern 來過濾 image reference (這個選項依個人理解是對於 image:tag 的過濾)

      $ docker images
      
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      busybox             latest              e02e811dd08f        5 weeks ago         1.09 MB
      busybox             uclibc              e02e811dd08f        5 weeks ago         1.09 MB
      busybox             musl                733eb3059dce        5 weeks ago         1.21 MB
      busybox             glibc               21c16b6787c6        5 weeks ago         4.19 MB
      
      $ docker images --filter=reference='busy*:*libc'
      
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      busybox             uclibc              e02e811dd08f        5 weeks ago         1.09 MB
      busybox             glibc               21c16b6787c6        5 weeks ago         4.19 MB
      
      $ docker images --filter=reference='busy*:uclibc' --filter=reference='busy*:glibc'
      
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      busybox             uclibc              e02e811dd08f        5 weeks ago         1.09 MB
      busybox             glibc               21c16b6787c6        5 weeks ago         4.19 MB
      
  4. --format

    透過 Go template 來格式化 docker images 的輸出內容

    可用變數說明
    .IDImage ID
    .RepositoryImage repository
    .TagImage tag
    .DigestImage digest
    .CreatedSinceimage 建立以來經過的時間
    .CreatedAtimage 建立時間
    .Sizeimage 大小
    docker images --format "{{.Repository}}:{{.Tag}}"| grep localhost:8082
    

    5format

  5. --no-trunc

    顯示完整 image 資訊

    • 未加 --no-trunc

      5trunc

    • --no-trunc

      6notrunc

  6. --quiet , -q

    僅顯示 image id

    7quiet

心得

之前一直覺得 docker images 指令很單純,大概就是列出個 repository、tag、id,大部份情境下已經相當夠用,真正要用時才發現自己是井底之蛙,為了取得 repository:tag ,還一度想要用 xargs 指令手動處理,查完資料才發現原來 docker images 原生就提供便捷的做法,也才發現自己學藝不精,立馬動手紀錄加深印象

參考資訊

  1. docker images
  2. 4.12 About Image Digests