多架构镜像统一通过manifest list机制实现,本质是关联不同架构镜像到同一标签而非合并镜像层;需先构建推送各架构镜像(如myapp:1.0_amd64、myapp:1.0_arm64),再用docker manifest创建并推送清单,或更推荐使用buildx一步构建推送。

多架构镜像合并为一个统一清单,本质不是“合并镜像层”,而是通过 Docker 的 Manifest List(清单列表)机制,把多个已构建好的、对应不同 CPU 架构的独立镜像,关联到同一个逻辑标签下。用户拉取时无需指定架构,Docker 客户端会自动根据运行环境选择匹配的镜像变体。
确认各架构镜像已就位
必须先确保目标架构(如 amd64、arm64)的镜像已分别构建并推送至同一仓库,且 tag 命名一致(仅后缀可区分架构)。例如:
-
myapp:1.0_amd64(已推送到 registry) -
myapp:1.0_arm64(已推送到 registry)
注意:这两个镜像必须使用相同基础、相同应用逻辑,仅底层系统架构不同;不能是功能完全不同的两个服务镜像。
用 docker manifest 创建清单列表
这是最直接、标准的方式。需启用实验性特性(Docker 20.10+ 默认开启),操作分三步:
- 创建空清单:
docker manifest create myregistry/myapp:1.0 - 添加各架构镜像:
docker manifest annotate myregistry/myapp:1.0 myregistry/myapp:1.0_amd64 --arch amd64 --os linuxdocker manifest annotate myregistry/myapp:1.0 myregistry/myapp:1.0_arm64 --arch arm64 --os linux - 推送清单:
docker manifest push myregistry/myapp:1.0
推送成功后,该 tag 就成为多架构入口。执行 docker manifest inspect myregistry/myapp:1.0 可看到包含多个 platform 条目的 JSON 清单。
更推荐:用 buildx 一步构建并推送
避免手动管理多个 tag 和 manifest,直接在构建阶段生成多架构支持:
- 确保 buildx builder 已启用并支持多平台(如
docker buildx inspect --bootstrap) - 运行命令:
docker buildx build --platform linux/amd64,linux/arm64 -t myregistry/myapp:1.0 --push .
buildx 会自动完成跨平台构建、打标、上传,并生成 Manifest List。整个过程无需人工干预镜像命名或 manifest 操作,适合 CI/CD 集成。
验证与使用
推送完成后,在任意架构机器上执行 docker pull myregistry/myapp:1.0,Docker 会自动拉取匹配本机的镜像(如 ARM 机器拉 arm64,Intel 机器拉 amd64)。也可用 docker run --rm -it myregistry/myapp:1.0 uname -m 验证实际运行架构。











