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