跳至主要内容

常用 Docker 指令:docker image

docker image 指令是 Docker 中專門用於管理映像(Image)的指令集合,涵蓋了映像從取得、查看、標記、推送到清理的完整操作流程。透過這組子命令,使用者可以從 Docker Hub 或私有 Registry 拉取映像、將本地映像推送至遠端倉庫、查看映像的建構歷史與詳細資訊,以及匯出映像為 tar 檔案以便離線傳輸。

history: 查看映像的建構歷史

說明顯示映像的每一層建構紀錄,包含指令、大小與建立時間
使用方式docker image history [OPTIONS] IMAGE
別名docker history
docker history my-app:latest
  • --no-trunc:顯示完整的指令內容,不截斷輸出。
  • -q, --quiet:只顯示映像的 Layer ID。
  • -H, --human:以人類可讀的格式顯示大小與日期(預設為 true)。

詳細 Options 說明可參閱 @docker image history

inspect: 查看映像詳細資訊

說明以 JSON 格式顯示一個或多個映像的詳細配置資訊
使用方式docker image inspect [OPTIONS] IMAGE [IMAGE...]
別名docker inspect
docker image inspect nginx:latest
  • -f, --format:使用 Go 模板語法格式化輸出,只顯示特定欄位,例如查看映像的作業系統:
docker image inspect --format '{{ .Os }}' nginx:latest

詳細 Options 說明可參閱 @docker image inspect

load: 從 tar 檔案載入映像

說明從 tar 壓縮檔(支援 gzip、bzip2、xz、zstd)載入映像或倉庫,同時還原映像與標籤
使用方式docker image load [OPTIONS]
別名docker load
docker load -i my-app.tar
  • -i, --input:指定要載入的 tar 檔案路徑,若不指定則從標準輸入(STDIN)讀取。
  • -q, --quiet:抑制載入過程的詳細輸出。

也可透過管道從標準輸入載入:

docker load < my-app.tar.gz

詳細 Options 說明可參閱 @docker image load

ls: 列出映像

說明列出本地所有頂層映像,顯示倉庫名稱、標籤、映像 ID、建立時間及大小
使用方式docker image ls [OPTIONS] [REPOSITORY[:TAG]]
別名docker images
docker images
  • -a, --all:列出所有映像,包含中間層(intermediate)與懸空映像(dangling images)。
  • -q, --quiet:只顯示映像 ID,適合在腳本中使用。
  • -f, --filter:根據條件過濾映像,例如只顯示懸空映像:
docker images -f dangling=true
  • --no-trunc:顯示完整的映像 ID,不截斷。

詳細 Options 說明可參閱 @docker image ls

prune: 清除未使用的映像

說明刪除所有懸空映像(dangling images);加上 -a 則刪除所有未被任何容器使用的映像
使用方式docker image prune [OPTIONS]
docker image prune
  • -a, --all:刪除所有未被任何容器參照的映像,而不僅限於懸空映像。
  • -f, --force:不詢問確認直接執行刪除。
  • --filter:根據條件過濾要刪除的映像,例如只刪除特定時間之前建立的映像:
docker image prune -a --filter "until=24h"
提示

懸空映像(dangling images) 是指沒有任何標籤(tag)且沒有被其他映像引用的孤立 layer,通常是在重新執行 docker build 時產生的舊中間層。可以放心刪除以釋放磁碟空間。

詳細 Options 說明可參閱 @docker image prune

pull: 從 Registry 拉取映像

說明從 Docker Hub 或其他 Registry 下載映像到本地
使用方式`docker image pull [OPTIONS] NAME[:TAG
別名docker pull
docker pull nginx:latest
  • -a, --all-tags:拉取倉庫中所有標籤版本的映像。
  • --platform:指定要拉取的目標平台,例如 linux/amd64linux/arm64

也可以從私有 Registry 拉取映像:

docker pull myregistry.example.com/my-app:1.0

或透過 digest(SHA256)來精確拉取特定版本,確保映像不會因標籤指向變動而改變:

docker pull nginx@sha256:abc123...

詳細 Options 說明可參閱 @docker image pull

push: 推送映像至 Registry

說明將本地映像上傳至 Docker Hub 或私有 Registry
使用方式docker image push [OPTIONS] NAME[:TAG]
別名docker push
docker push myusername/my-app:latest
  • -a, --all-tags:推送倉庫中所有本地標籤版本的映像。
提示

推送映像前需先執行 docker login 進行身份驗證。推送時顯示的進度條大小為未壓縮大小,實際上傳的資料量會在壓縮後傳送,並不會與進度條顯示的一致。

詳細 Options 說明可參閱 @docker image push

rm: 刪除映像

說明從本地主機移除一個或多個映像(同時移除對應標籤)
使用方式docker image rm [OPTIONS] IMAGE [IMAGE...]
別名docker rmi
docker rmi my-app:latest
  • -f, --force:強制刪除映像,即使有容器正在使用它。
  • --no-prune:不自動刪除未被標記的父層映像。
警告

若一個映像有多個標籤(tag),使用標籤名稱執行刪除時,只會移除該標籤,不會真正刪除映像本身。只有當映像上的最後一個標籤被移除時,映像才會被真正刪除。

詳細 Options 說明可參閱 @docker image rm

save: 將映像匯出為 tar 檔案

說明將一個或多個映像匯出成 tar 壓縮包,包含所有父層及標籤資訊,可透過 docker load 還原
使用方式docker image save [OPTIONS] IMAGE [IMAGE...]
別名docker save
docker save -o my-app.tar my-app:latest
  • -o, --output:指定輸出的 tar 檔案路徑,若不指定則輸出至標準輸出(STDOUT)。

也可以搭配 gzip 壓縮縮小匯出檔案的大小:

docker save my-app:latest | gzip > my-app.tar.gz

詳細 Options 說明可參閱 @docker image save

tag: 為映像新增標籤

說明為現有映像新增一個新的標籤(tag),建立指向同一映像的別名
使用方式docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
別名docker tag
docker tag my-app:latest myusername/my-app:1.0

Docker 映像的完整參照格式為:

[HOST[:PORT]/]NAMESPACE/REPOSITORY[:TAG]
  • HOST:Registry 主機名稱,預設為 docker.io(Docker Hub)。
  • PORT:Registry 埠號,例如私有 Registry 常用 :5000
  • NAMESPACE/REPOSITORY:命名空間與倉庫名稱,官方映像的命名空間為 library
  • TAG:版本標籤,預設為 latest

tag 指令常用於為映像加上 Registry 前綴,以便後續 docker push 推送至指定倉庫:

docker tag my-app:latest myregistry.example.com/my-app:1.0
docker push myregistry.example.com/my-app:1.0

詳細 Options 說明可參閱 @docker image tag

Reference