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/'); do
new_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