4.2 列出映象

在下載了映象後,我們可以使用 docker image ls 指令列出本地主機上的映象。

4.2.1 基本用法

檢視本地已下載的映象:

$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    5f515359c7f8   5 days ago     183MB
nginx        latest    05a60462f8ba   5 days ago     181MB
ubuntu       24.04     329ed837d508   3 days ago     78MB
ubuntu       noble     329ed837d508   3 days ago     78MB

💡 docker imagesdocker image ls 的簡寫,兩者等效。


4.2.2 輸出欄位說明

docker image ls 指令預設輸出的清單包含倉庫名、標籤、映象 ID、建立時間和佔用空間等訊息。

欄位 說明
REPOSITORY 倉庫名
TAG 標籤 (版本)
IMAGE ID 映象唯一標識 (短 ID,前 12 位)
CREATED 建立時間
SIZE 本地佔用空間

同一映象多個標籤

注意上面的 ubuntu:24.04ubuntu:noble 擁有相同的 IMAGE ID——它們是同一個映象的不同標籤,只佔用一份儲存空間。

版本說明ubuntu:24.04 是具體版本號,ubuntu:noble 是發布代號(Ubuntu 24.04 的代號)。在 Dockerfile 中應優先使用版本號(如 ubuntu:24.04)而非發布代號,因為版本號在將來更易理解。


4.2.3 理解映象大小

Docker 映象的大小可能與我們通常理解的檔案大小有所不同,這涉及到分層儲存的概念。

本地大小 vs Hub 顯示大小

位置 顯示大小 說明
Docker Hub 29MB 壓縮後的網路傳輸大小
docker image ls 78MB 本地解壓後的實際大小

實際磁碟佔用

由於映象是分層儲存,不同映象可能共享相同的層:

ubuntu:24.04    nginx:latest    redis:latest
    │               │                │
    └───────┬───────┘                │
            ▼                        │
       共享基礎層 ◄───────────────────┘

因此,docker image ls 中各映象大小之和 > 實際磁碟佔用。

檢視實際空間佔用

$ docker system df
TYPE            TOTAL   ACTIVE   SIZE      RECLAIMABLE
Images          15      3        2.5GB     1.8GB (72%)
Containers      5       2        100MB     80MB (80%)
Local Volumes   8       2        500MB     400MB (80%)
Build Cache     0       0        0B        0B

4.2.4 過濾映象

隨著本地映象數量的增加,我們需要更有效的方式來查詢特定的映象。Docker 提供了多種過濾方式。

按倉庫名過濾

## 列出所有 ubuntu 映象

$ docker images ubuntu
REPOSITORY   TAG     IMAGE ID       SIZE
ubuntu       24.04   329ed837d508   78MB
ubuntu       noble   329ed837d508   78MB
ubuntu       22.04   a1b2c3d4e5f6   72MB

按倉庫名和標籤過濾

$ docker images ubuntu:24.04
REPOSITORY   TAG     IMAGE ID       SIZE
ubuntu       24.04   329ed837d508   78MB

使用過濾器 --filter

過濾條件 說明 範例
dangling=true 虛懸映象 -f dangling=true
before=映象 在某映象之前建立 -f before=nginx:latest
since=映象 在某映象之後建立 -f since=nginx:latest
label=key=value 按 LABEL 過濾 -f label=version=1.0
reference=pattern 按名稱模式 -f reference='*:latest'
## 列出 nginx 之後建立的映象

$ docker images -f since=nginx:latest

## 列出所有帶 latest 標籤的映象

$ docker images -f reference='*:latest'

## 列出帶特定 LABEL 的映象

$ docker images -f label=maintainer=example@email.com

4.2.5 虛懸映象

在映象清單裡,你可能會看到一些倉庫名和標籤都為 <none> 的映象,這類映象被稱為虛懸映象。

什麼是虛懸映象

倉庫名和標籤都顯示為 <none> 的映象:

$ docker images
REPOSITORY   TAG       IMAGE ID       SIZE
<none>       <none>    00285df0df87   342MB

產生原因

  1. 映象重新建立:新映象使用了舊映象的標籤,舊映象標籤被移除
  2. docker pull 更新:拉取更新版本時,舊版本失去標籤

處理虛懸映象

## 列出虛懸映象

$ docker images -f dangling=true

## 刪除虛懸映象

$ docker image prune

4.2.6 中間層映象

除了虛懸映象,docker image ls 預設列出的只是頂層映象。還有一種映象是為了加速映象建立、重複利用資源而存在的中間層映象。

檢視所有映象:包含中間層

$ docker images -a

會顯示很多無標籤映象——這些是建立過程中產生的中間層,被其他映象依賴。

⚠️ 不要刪除中間層映象。它們是其他映象的依賴,刪除會導致上層映象無法使用。刪除頂層映象時會自動清理不再需要的中間層。


4.2.7 格式化輸出

為了配合指令碼使用或展示更關注的訊息,我們可以使用 --format 引數來自定義輸出格式。

只輸出 ID

$ docker images -q
5f515359c7f8
05a60462f8ba
329ed837d508

常用於配合其他指令:

## 刪除所有映象

$ docker rmi $(docker images -q)

## 刪除所有 redis 映象

$ docker rmi $(docker images -q redis)

顯示完整 ID

$ docker images --no-trunc

顯示摘要

$ docker images --digests
REPOSITORY   TAG     DIGEST                    IMAGE ID
nginx        latest  sha256:b4f0e0bdeb5...    e43d811ce2f4

自定義格式

使用 Go 樣板語法自定義輸出:

## 只顯示 ID 和倉庫名

$ docker images --format "{{.ID}}: {{.Repository}}"
5f515359c7f8: redis
05a60462f8ba: nginx
329ed837d508: ubuntu

## 表格形式(帶標題)

$ docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
REPOSITORY   TAG       SIZE
redis        latest    183MB
nginx        latest    181MB
ubuntu       24.04     78MB

可用樣板欄位

欄位 說明
.ID 映象 ID
.Repository 倉庫名
.Tag 標籤
.Digest 摘要
.CreatedSince 建立後經過的時間
.CreatedAt 建立時間
.Size 大小

4.2.8 常用指令組合

## 列出所有映象及其大小,按大小排序(需要系統 sort 指令)

$ docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -h

## 查詢大於 500MB 的映象

$ docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | grep -E "^[0-9]+GB|^[5-9][0-9]{2}MB"

## 匯出映象清單

$ docker images --format "{{.Repository}}:{{.Tag}}" > images.txt

第 28 页,共 196 页
使用 mdPress 构建