一、什么是 docker buildx
docker buildx 是 Docker 官方的 CLI 插件,基于 BuildKit 构建引擎,扩展了 docker build 的能力,核心是多平台镜像构建、高效缓存、并行构建、自定义构建器,解决传统 docker build 不支持跨架构、缓存弱、功能单一的问题。
- 核心定位:Buildx = BuildKit 的前端 CLI,管理构建器(builder)、执行跨平台构建、输出多种格式(镜像、本地文件、tar)。
- 安装:Docker Desktop 已默认集成;Linux 需安装 docker-buildx-plugin 包。
二、核心概念:构建器(Builder)
Buildx 以构建器实例运行,每个实例对应一个 BuildKit 后端,支持不同驱动: 1. docker(默认):使用本地 Docker 引擎,不支持多平台并行构建 2. docker-container(推荐):在独立容器中运行 BuildKit,支持多平台、完整缓存、并行构建 3. kubernetes:在 K8s 集群中运行 BuildKit,适合大规模 CI/CD 4. remote:连接远程 BuildKit 实例
常用构建器命令
# 1. 创建并启用支持多平台的构建器(docker-container驱动)
docker buildx create --name mybuilder --driver docker-container --use
# 2. 启动/初始化构建器(拉取BuildKit镜像、配置QEMU)
docker buildx inspect mybuilder --bootstrap
# 3. 查看当前构建器
docker buildx ls
# 4. 切换构建器
docker buildx use mybuilder
# 5. 删除构建器
docker buildx rm mybuilder
三、核心命令:docker buildx build
基础用法(同 docker build,兼容所有参数)
# 单平台构建(默认当前架构)
docker buildx build -t myimage:v1 .
# 多平台核心命令(最常用):同时构建 amd64/arm64,直接推送到仓库
docker buildx build \
--platform linux/amd64,linux/arm64,linux/arm/v7 \
-t username/myapp:latest \
--push \
.
--platform:指定目标平台,格式os/arch[/variant],如linux/amd64、linux/arm64、linux/arm/v7--push:直接推送到镜像仓库(Docker Hub、私有 registry);默认不加载到本地 Docker 引擎(多平台镜像无法直接加载到本地默认存储)--load:仅单平台时可用,把镜像加载到本地 Docker(docker images可见)--output/-o:导出为本地文件/目录(不生成镜像):--output type=local,dest=./output、--output type=tar,dest=image.tar
多平台构建的三种方式(Buildx 支持)
- QEMU 仿真(最简单,无需改 Dockerfile)
- 依赖内核 QEMU 支持,Docker Desktop 已默认开启;Linux 需安装
qemu-user-static - 适合简单镜像、无需交叉编译的场景
- 原生多节点构建(最快,无仿真开销)
- 把不同架构的机器加入同一个 builder,分别原生构建
- Dockerfile 交叉编译(最灵活,性能最好)
- 在 Dockerfile 中用
ARG TARGETOS/TARGETARCH做跨平台编译,避免仿真
四、常用参数与进阶用法
1. 缓存优化(BuildKit 核心优势)
# 启用缓存,推送到 registry 共享缓存(CI/CD 必备)
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t myimage:v1 \
--cache-from type=registry,ref=myimage:cache \
--cache-to type=registry,ref=myimage:cache,mode=max \
--push .
--cache-from:从哪里读取缓存--cache-to:把缓存写到哪里(mode=max保留所有层缓存)
2. 构建参数与多阶段
# 传递构建参数、指定 Dockerfile、多阶段目标
docker buildx build \
--platform linux/amd64,linux/arm64 \
-f Dockerfile.prod \
--build-arg VERSION=1.0.0 \
--target production \
-t myapp:prod \
--push .
3. 查看构建详情
# 查看构建器状态、支持平台
docker buildx inspect --bootstrap
# 查看构建历史
docker buildx du
五、常见问题与注意事项
- 多平台镜像无法
docker load到本地:默认 Docker 存储不支持多平台 manifest;要么用--push推仓库,要么启用 containerd 镜像存储(Docker Desktop 设置 → 通用 → 使用 containerd 存储镜像) - QEMU 仿真慢:复杂编译(如 Go、Rust)建议用交叉编译,或原生节点构建
- 构建器卡住/异常:删除重建:
docker buildx rm mybuilder && docker buildx create --name mybuilder --use
六、完整实战示例(一键多平台构建+推送)
# 1. 创建并启用构建器
docker buildx create --name multi-builder --driver docker-container --use
docker buildx inspect --bootstrap
# 2. 构建并推送 amd64/arm64 镜像
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t yourname/hello:v1 \
--cache-from type=registry,ref=yourname/hello:cache \
--cache-to type=registry,ref=yourname/hello:cache,mode=max \
--push \
.
# 3. 验证(拉取并运行对应架构)
docker run --rm yourname/hello:v1