1、命令總覽
命令(含關鍵參數) | 作用 | 出現頻率 | 備注 |
---|
docker buildx build --platform … -t … --push . | 一次構建并推送多平臺鏡像 | 高頻 | 需先?docker buildx create --use |
docker buildx build -o type=docker,dest=xxx.tar . | 構建后離線導出 tar 包 | 中頻 | 只導出單平臺;tar 可 U 盤帶走 |
docker save -o xxx.tar img1:tag img2:tag … | 把已有鏡像打包成 tar | 中頻 | 不依賴 buildx;支持多鏡像一次性打包 |
docker load -i xxx.tar | 從 tar 恢復鏡像到本地 | 中頻 | 與 save 配對使用;自動恢復 tag |
docker tag SOURCE[:TAG] TARGET[:TAG] | 給鏡像打新名字/標簽 | 高頻 | 打標簽后可直接 push |
docker rmi 鏡像ID/倉庫:標簽 … | 刪除一個或多個鏡像 | 高頻 | 加?-f ?可強制刪除正被容器引用的鏡像 |
docker image prune -a -f | 清理所有未被使用的鏡像 | 中頻 | -a ?會刪除所有懸空+未使用鏡像,慎用 |
docker history 鏡像[:TAG] | 查看鏡像分層歷史 | 低頻 | 排查“鏡像為什么這么大”時很有用 |
2、docker ? buildx* ? ?
2.1、Docker build
命令 | 作用 | 出現頻率 | 備注 |
---|
docker build -t <image_name>:<tag> . | 根據當前目錄中的 Dockerfile 生成鏡像 | 高頻 | 構建鏡像的基本命令 |
docker build -t myapp:v1 . | 構建鏡像并標記為 myapp:v1 | 高頻 | 提供鏡像的名稱和版本標簽 |
docker build -t myImage -f demo/Dockerfile | 使用指定目錄中的 Dockerfile 構建鏡像 | 中頻 | 適用于 Dockerfile 不在當前目錄的情況 |
# 構建鏡像并標記為 myapp:v1
docker build -t myapp:v1 .# 構建指定標簽的 Docker 鏡像
docker build -t myImage:v0.1.0 .# 使用指定目錄中的 Dockerfile 構建映像
docker build -t myImage -f demo/Dockerfile
2.2、docker buildx create
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx create --name <builder_name> | 創建一個新的 builder 實例 | 中頻 | 可以指定 builder 的名稱 |
docker buildx create --name <builder_name> --driver docker-container | 創建使用 Docker 容器作為驅動的 builder 實例 | 中頻 | 適用于需要遠程構建的場景 |
docker buildx create --name <builder_name> --driver kubernetes | 在 Kubernetes 集群中創建 builder 實例 | 低頻 | 需要 Kubernetes 環境支持 |
docker buildx create --name <builder_name> --bootstrap | 創建并自動啟動 builder 實例 | 中頻 | 簡化創建和啟動流程 |
docker buildx create --name <builder_name> --use | 創建新的 builder 并將其設為默認 | 高頻 | 之后的所有構建命令將使用此 builder |
# 創建一個新的名為 mybuilder 的 builder 實例
docker buildx create --name mybuilder# 創建使用 Docker 容器作為驅動的 builder 實例
docker buildx create --name mybuilder --driver docker-container# 創建并自動啟動 builder 實例
docker buildx create --name mybuilder --bootstrap# 創建新的 builder 并將其設為默認
docker buildx create --name mybuilder --use# 創建一個自定義 builder 實例并立即激活
docker buildx create --name mybuilder --use
2.3、docker buildx use
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx use <builder_name> | 切換到指定的 builder 實例 | 高頻 | 切換后所有構建命令將使用此 builder |
docker buildx use --name <builder_name> | 切換到指定名稱的 builder 實例 | 中頻 | 需要指定 builder 的名稱 |
docker buildx use --use | 將當前 builder 設為默認 | 中頻 | 后續命令無需指定 builder 名稱 |
docker buildx use --bootstrap | 創建并切換到新的 builder 實例 | 中頻 | 適用于需要快速創建并使用新 builder 的場景 |
docker buildx use --list | 列出所有可用的 builder 實例 | 低頻 | 顯示當前所有 builder 的名稱和狀態 |
# 切換到名為 mybuilder 的 builder 實例
docker buildx use mybuilder# 切換到名為 mybuilder 的 builder 實例,并將其設為默認
docker buildx use --name mybuilder --use# 創建新的 builder 實例并立即切換到它
docker buildx use --bootstrap# 列出所有可用的 builder 實例
docker buildx use --list# 切換到默認的 builder 實例
docker buildx use default
2.4、docker buildx ls
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx ls | 列出所有可用的 builder 實例 | 中頻 | 顯示所有 builder 的名稱、狀態和節點信息 |
docker buildx ls -q | 僅列出 builder 實例的名稱 | 低頻 | 適合腳本處理,輸出名稱列表 |
docker buildx ls --quiet | 同上,僅輸出 builder 名稱 | 低頻 | 等同于?-q |
docker buildx ls --format "table {{.Name}}\t{{.DriverName}}" | 自定義輸出格式 | 低頻 | 根據需要顯示不同信息 |
# 列出所有可用的 builder 實例及其詳細信息
docker buildx ls# 僅列出所有 builder 的名稱
docker buildx ls -q# 列出 builder 名稱和使用的驅動名稱
docker buildx ls --format "table {{.Name}}\t{{.DriverName}}"# 列出所有 builder,包括詳細信息
docker buildx ls --all
2.5、docker buildx build
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx build | 使用 BuildKit 構建鏡像 | 高頻 | 默認使用當前激活的 builder |
--platform | 指定目標平臺(架構/操作系統) | 高頻 | 支持多平臺構建 |
--push | 構建完成后推送到注冊中心 | 高頻 | 需要先登錄 |
--output | 指定構建產物輸出 | 中頻 | 支持導出為 tar 或其他格式 |
--no-cache | 構建時不使用緩存 | 中頻 | 強制重新構建所有層 |
--load | 構建完成后將鏡像導入本地環境 | 中頻 | 適用于不想推送到遠程的場景 |
--build-arg | 傳遞構建參數 | 中頻 | 動態定義環境變量 |
-標簽 | 構建時設置鏡像標簽 | 中頻 | 可以設置版本標簽 |
# 使用當前激活的 builder 構建鏡像
docker buildx build -t myimage:latest .# 指定目標平臺構建并推送鏡像
docker buildx build --platform linux/amd64,linux/arm64 -t myregistry/myimage:latest --push .# 構建完成后將鏡像導入本地環境
docker buildx build -t myimage:latest --load .# 構建時不使用緩存,強制重新構建所有層
docker buildx build --no-cache -t myimage:latest .# 構建時傳遞構建參數
docker buildx build --build-arg HTTP_PROXY=http://proxy:8080 -t myimage:latest .# 構建并導出為 tar 文件
docker buildx build -t myimage:latest -o type=docker,dest=myimage.tar .
2.6、docker buildx bake
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx bake | 基于文件進行構建 | 中頻 | 允許用戶在一個命令中定義多個構建配置和目標平臺,實現自動化批量構建和發布跨平臺鏡像 |
docker buildx bake -f <文件> | 指定構建定義文件 | 高頻 | 支持 HCL、JSON 或 YAML 文件格式 |
docker buildx bake <目標> | 構建指定目標 | 高頻 | 可以指定一個或多個目標進行構建 |
docker buildx bake --push | 構建完成后推送到注冊中心 | 中頻 | 需要先登錄 |
docker buildx bake --load | 構建完成后將鏡像導入本地環境 | 中頻 | 適用于不想推送到遠程的場景 |
docker buildx bake --no-cache | 構建時不使用緩存 | 中頻 | 強制重新構建所有層 |
docker buildx bake --set <覆蓋配置> | 覆蓋目標值 | 中頻 | 例如?targetpattern.key=value |
# 構建所有目標
docker buildx bake# 構建特定目標
docker buildx bake myapp# 構建特定目標并推送
docker buildx bake --push myapp# 構建特定目標并導入到本地環境
docker buildx bake --load myapp# 構建特定目標不使用緩存
docker buildx bake --no-cache myapp# 構建特定目標并覆蓋配置
docker buildx bake --set "myapp.tags=latest" myapp
2.7、docker buildx inspect
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx inspect | 顯示指定 builder 實例的詳細信息 | 低頻 | 包括節點信息、支持的平臺等 |
--format | 定制輸出格式 | 低頻 | 用于腳本處理,輸出特定信息 |
# 顯示名為 mybuilder 的 builder 實例的詳細信息
docker buildx inspect mybuilder# 以 JSON 格式輸出 builder 實例的信息,便于腳本處理
docker buildx inspect mybuilder --format "{{json .}}"# 僅輸出 builder 實例的節點信息
docker buildx inspect mybuilder --format "{{json .Node }}"
2.8、docker buildx du
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx du | 顯示當前所選構建器的磁盤使用情況 | 中頻 | 包括緩存條目的 ID、大小以及最后訪問時間。末尾的?TOTAL ?行表示當前構建器的構建緩存占用的總磁盤空間。 |
--filter | 提供過濾值 | 低頻 | 用于過濾輸出結果 |
--verbose | 提供更詳細的輸出 | 中頻 | 顯示可變和共享狀態,以及有關相應層的附加信息 |
--builder | 覆蓋配置的構建器實例 | 中頻 | 檢查特定構建器的磁盤使用情況 |
# 查看當前構建器的磁盤使用情況
docker buildx du# 使用詳細輸出來檢查磁盤使用記錄
docker buildx du -v# 檢查特定構建器實例的磁盤使用情況
docker buildx du --builder mybuilder
2.9、docker buildx prune
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx prune | 清理構建緩存 | 中頻 | 包括內部鏡像和未使用的構建緩存條目 |
docker buildx prune --filter | 根據條件篩選清理 | 低頻 | 可以指定時間、類型等條件進行篩選清理 |
docker buildx prune --keep-storage | 清理至特定存儲大小 | 低頻 | 保留指定大小的構建緩存 |
docker buildx prune --all | 清理所有構建緩存 | 低頻 | 包括內部鏡像和所有構建緩存條目 |
# 清理所有構建緩存
docker buildx prune# 清理所有構建緩存,包括內部鏡像
docker buildx prune --all# 清理構建緩存,保留最近5分鐘的數據
docker buildx prune --filter "until=5m"# 清理構建緩存,保留1GB的存儲空間
docker buildx prune --keep-storage 1g
2.10、docker buildx stop
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx stop <builder> | 停止指定的 builder 實例 | 中頻 | 停止 builder 實例,釋放資源 |
docker buildx stop --all | 停止所有 builder 實例 | 低頻 | 一次性停止所有 builder 實例 |
# 停止名為 mybuilder 的 builder 實例
docker buildx stop mybuilder# 列出所有 builder 實例并停止
docker buildx ls -q | xargs -n 1 docker buildx stop# 停止所有 builder 實例
docker buildx stop --all
2.11、docker buildx rm
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx rm <builder> | 刪除指定的 builder 實例 | 中頻 | 刪除后無法再使用該實例 |
docker buildx rm --all | 刪除所有 builder 實例 | 低頻 | 一次性刪除所有 builder 實例 |
docker buildx rm -f <builder> | 強制刪除指定的 builder 實例 | 中頻 | 即使 builder 正在運行也會被刪除 |
# 刪除名為 mybuilder 的 builder 實例
docker buildx rm mybuilder# 強制刪除名為 mybuilder 的 builder 實例(如果正在運行也會被刪除)
docker buildx rm -f mybuilder# 刪除所有 builder 實例
docker buildx rm --all
2.12、docker buildx imagetools
命令 | 作用 | 出現頻率 | 備注 |
---|
docker buildx imagetools create | 創建新的鏡像 | 低頻 | 合并多個源鏡像內容,常用于構建復雜應用 |
docker buildx imagetools inspect | 檢查 Docker 鏡像的詳細信息 | 中頻 | 包括單平臺和多平臺鏡像的配置、分層結構和元數據 |
# 使用 docker buildx imagetools create 命令創建新鏡像
docker buildx imagetools create my-multi-stage-image:latest ~/project# 檢查單平臺 Docker 鏡像的詳細信息
docker buildx imagetools inspect hello-world# 檢查多平臺 Docker 鏡像的詳細信息
docker buildx imagetools inspect alpine
3、docker save
命令 | 作用 | 出現頻率 | 備注 |
---|
docker save -o xxx.tar IMAGE[:TAG]… | 把本地鏡像打包成 tar 歸檔 | 中頻 | 不依賴網絡,離線/內網分發必備 |
docker save IMAGE… | gzip > xxx.tar.gz | 打包并實時壓縮 | 低頻 | 節省磁盤與傳輸帶寬 |
docker save IMAGE | docker load | 管道直連,無需中間文件 | 低頻 | 兩臺機器都有 Docker 時最快速 |
docker save --help | 查看全部參數 | 極低 | 參數很少,幾乎用不到其它選項 |
# ---------- docker save 常用示例 ----------
# 1) 打包單個鏡像
docker save -o nginx_alpine.tar nginx:alpine# 2) 一次打包多個鏡像到一個 tar
docker save -o web_cache.tar redis:7 alpine:3.18# 3) 打包并實時壓縮
docker save nginx:alpine | gzip > nginx_alpine.tar.gz# 4) 管道直連:A 機器 → B 機器,無需中間文件
docker save myapp:latest | ssh user@192.168.1.100 "docker load"# 5) 查看 tar 包里包含哪些鏡像
tar -tf web_cache.tar | grep "\.json" | head
4、docker ? load
? ? ? ?Load an image from a tar archive or STDIN
命令 | 作用 | 出現頻率 | 備注 |
---|
docker load -i xxx.tar | 從 tar 歸檔導入鏡像(含 tag) | 高頻 | 與?docker save ?配套 |
docker load < xxx.tar | 重定向導入(同上) | 中頻 | 寫法差異,效果一致 |
docker load --quiet | 靜默導入 | 低頻 | CI/CD 日志更干凈 |
docker load (管道用法) | 直接接收 stdin 流 | 低頻 | 可結合?ssh /curl ?實現無文件傳輸 |
# ---------- docker load 常用示例 ----------
# 1) 從本地 tar 導入鏡像
docker load -i web_cache.tar# 2) 重定向導入(效果同上)
docker load < web_cache.tar# 3) 靜默導入(不輸出詳細進度)
docker load --quiet -i web_cache.tar# 4) 管道直連:遠程機器把 tar 流過來直接 load
ssh user@192.168.1.100 "cat /tmp/web_cache.tar" | docker load# 5) 解壓并導入(tar.gz 場景)
gunzip -c web_cache.tar.gz | docker load
5、docker ? tag
? ? ? ? Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
命令 | 作用 | 出現頻率 | 備注 |
---|
docker tag <src[:tag]> <dst[:tag]> | 為本地鏡像創建新名字/標簽 | 高頻 | 僅創建引用,不拷貝數據 |
docker tag <imageID> <dst[:tag]> | 按 ID 打標簽 | 中頻 | 適合無原標簽場景 |
docker tag <src> <registry>/repo:<ver> | 給推送倉庫做準備 | 高頻 | 推送前必做 |
# ---------- docker tag 常用示例 ----------
# 1) 為已有鏡像 nginx:alpine 創建本地新標簽
docker tag nginx:alpine mynginx:latest# 2) 按鏡像 ID 打標簽(假設 ID 為 1a2b3c4d)
docker tag 1a2b3c4d myapp:v1.0.0# 3) 為推送私有倉庫打標簽
docker tag myapp:v1.0.0 harbor.example.com/library/myapp:v1.0.0# 4) 一次鏡像多版本標簽(方便回滾)
docker tag myapp:v1.0.0 myapp:stable
docker tag myapp:v1.0.0 myapp:1.0
docker tag myapp:v1.0.0 myapp:latest# 5) 批量重命名腳本示例(把舊倉庫名統一換成新倉庫名)
for t in $(docker images --format '{{.Repository}}:{{.Tag}}' | grep '^oldrepo/'); donew_name=$(echo "$t" | sed 's#^oldrepo/#newrepo/#')docker tag "$t" "$new_name"
done
6、docker rmi ?
? ? ? Remove one or more images
命令 | 作用 | 出現頻率 | 備注 |
---|
docker rmi <鏡像:標簽> | 按倉庫名+標簽刪除鏡像 | 高頻 | 刪除所有同名標簽即刪除鏡像 |
docker rmi <IMAGE_ID> | 按鏡像 ID 刪除 | 高頻 | ID 可簡寫前 3 位以上 |
docker rmi -f <鏡像> | 強制刪除(含正在運行的容器) | 中頻 | 會先停止并刪除相關容器 |
docker rmi $(docker images -q) | 批量刪除所有本地鏡像 | 低頻 | 危險!請確認無重要數據 |
# ---------- docker rmi 常用示例 ----------
# 1) 刪除單個鏡像(按倉庫:標簽)
docker rmi nginx:alpine# 2) 刪除單個鏡像(按鏡像 ID,前 4 位即可)
docker rmi 7d8e# 3) 強制刪除(即使有容器正在使用)
docker rmi -f myapp:latest# 4) 一次刪除多個鏡像
docker rmi redis:7 alpine:3.18 busybox:1.35# 5) 批量刪除所有“懸空”鏡像(<none>:<none>)
docker rmi $(docker images -f "dangling=true" -q)# 6) 危險!一次性清空本地所有鏡像(慎用)
# docker rmi $(docker images -q)
7、docker ? image
? ?Manage images
子命令 | 作用 | 出現頻率 | 備注 |
---|
docker image ls | 列出本地鏡像 | 高頻 | 可簡寫?docker images |
docker image rm <鏡像> | 刪除指定鏡像 | 高頻 | 與?docker rmi ?等價 |
docker image prune [-a -f] | 清理未被使用的鏡像 | 中頻 | -a ?包含非懸空鏡像 |
docker image inspect <鏡像> | 查看鏡像元數據 | 中頻 | JSON 格式,調試利器 |
docker image history <鏡像> | 查看鏡像分層歷史 | 低頻 | 排查鏡像大小來源 |
docker image tag | 給鏡像打標簽 | 低頻 | 與?docker tag ?等價 |
# ---------- docker image 常用示例 ----------
# 1) 列出本地鏡像(簡潔格式)
docker image ls# 2) 僅顯示鏡像 ID(腳本用)
docker image ls -q# 3) 刪除指定鏡像
docker image rm nginx:alpine# 4) 強制批量刪除所有懸空鏡像
docker image prune -f# 5) 強制刪除所有未被容器引用的鏡像(慎用)
docker image prune -a -f# 6) 查看鏡像完整元數據
docker image inspect nginx:alpine# 7) 查看鏡像分層歷史(帶大小)
docker image history --no-trunc nginx:alpine# 8) 給鏡像打標簽(與 docker tag 等價)
docker image tag nginx:alpine harbor.example.com/library/nginx:v1
8、docker history
? ? Show the history of an image
命令 | 作用 | 出現頻率 | 備注 |
---|
docker history <鏡像> | 查看鏡像分層歷史 | 中頻 | 快速定位“鏡像為何這么大” |
--no-trunc | 顯示完整命令 | 低頻 | 解決輸出被截斷 |
--format | 自定義輸出 | 低頻 | 用于腳本或統計 |
# ---------- docker history 常用示例 ----------
# 1) 查看鏡像分層歷史(默認表格式)
docker history nginx:alpine# 2) 顯示完整命令(不被截斷)
docker history --no-trunc nginx:alpine# 3) 僅查看鏡像 ID 與大小(腳本友好)
docker history --format "table {{.ID}}\t{{.Size}}" nginx:alpine# 4) 按層大小排序(由大到小)
docker history --format "{{.Size}}\t{{.CreatedBy}}" nginx:alpine | sort -hr# 5) 配合 jq 統計總大小(需安裝 jq)
docker history --format '{{json .}}' nginx:alpine | jq -s 'map(.Size | tonumber) | add' | numfmt --to=iec