docker buildx 是官方推荐的多架构镜像构建方式,通过 BuildKit 调度、QEMU 模拟和 manifest list 实现一次命令生成并推送多平台镜像;需依次启用 QEMU 支持、创建多节点构建器、编写兼容 Dockerfile、执行 build --platform 与 --push。

用 docker buildx 是最直接、官方推荐的方式。它不是简单地“多打几个 tag”,而是通过 BuildKit 调度、QEMU 模拟和 manifest list 机制,真正实现一次命令生成多个架构的镜像,并统一推送到同一个标签下。
第一步:启用 QEMU 和 binfmt_misc 支持
这是跨架构构建的前提,让 x86 主机也能运行 ARM 等非原生二进制:
- 运行命令注册所有常见架构的模拟器:
docker run --privileged --rm tonistiigi/binfmt:latest --install all - 该操作会配置内核的
binfmt_misc,后续 buildx 就能自动调用对应 QEMU 二进制做模拟编译 - 若使用 Docker Desktop(macOS/Windows),这步通常已默认完成,可跳过
第二步:创建并启用多节点构建器
buildx 默认只用本地 Docker 引擎(仅支持当前主机架构),需显式创建支持多平台的构建器:
- 创建新构建器并设为默认:
docker buildx create --use --name mybuilder --bootstrap - 检查是否就绪:
docker buildx inspect --bootstrap,输出中应看到linux/amd64和linux/arm64等平台标记为supported - 如遇权限或驱动问题,可加
--driver docker-container启动独立容器节点
第三步:编写兼容多架构的 Dockerfile
关键在于利用 Buildx 注入的构建变量,避免硬编码平台相关逻辑:
- 开头声明语法版本:
# syntax=docker/dockerfile:1 - 构建阶段用
--platform=$BUILDPLATFORM拉取匹配当前构建环境的基础镜像(如 golang) - 运行阶段用
--platform=$TARGETPLATFORM拉取目标架构基础镜像(如 alpine) - 交叉编译时用
${TARGETARCH}设置 GOARCH、CC 等环境变量
第四步:构建并推送多架构镜像
一条命令完成编译、打包、上传、清单合并:
- 指定目标平台列表,例如:
--platform linux/amd64,linux/arm64,linux/arm/v7 - 加上
--push参数,buildx 会自动将各架构镜像推到仓库,并生成 manifest list - 完整示例:
docker buildx build --platform linux/amd64,linux/arm64 -t yourname/app:latest --push . - 成功后,任意架构机器执行
docker pull yourname/app:latest都会自动拉取对应版本


















