Docker 多平台镜像构建与推送教程(arm64 主机示例)
准备条件
- Docker >= 20.10
- Docker Hub 账号
- 主机架构示例:arm64
- 已有 Dockerfile
确保 Docker 可以正常运行:
安装并配置 Buildx
- 查看当前 buildx:
- 创建多平台 builder(如果已存在可跳过):
- 启动并初始化 builder:
确保输出包含
Platforms: linux/amd64, linux/arm64, ...
启用 QEMU 支持跨平台构建
在 arm64 主机上构建 amd64 镜像,需要 QEMU 模拟:
再次 bootstrap builder:
输出
Platforms应包含linux/amd64和linux/arm64
检查本地镜像(可选)
确保你的单平台镜像 metadata 正确:
示例:
构建多平台镜像并推送
假设镜像名为 koalalove/moodle:5.1.1:
解释:
--platform linux/amd64,linux/arm64:构建 amd64 和 arm64-t koalalove/moodle:5.1.1:生成的镜像 tag--push:构建完成直接推送到 Docker Hub- 构建完成后,Docker Hub 上的 tag
5.1.1会自动生成 multi-arch manifest
如果想只构建本地当前平台,可加
--load,但多架构必须使用--push
验证多架构镜像
- 查看 Hub 上 manifest:
输出示例:
{
"schemaVersion": 2,
"mediaType": "application/vnd.oci.image.index.v1+json",
"manifests": [
{ "platform": {"architecture": "amd64", "os": "linux"} },
{ "platform": {"architecture": "arm64", "os": "linux"} }
]
}
- 拉取镜像时,Docker 会根据客户端架构自动选择:
- arm64 客户端拉 arm64 镜像
- amd64 客户端拉 amd64 镜像
总结
- 使用 buildx + QEMU 可以在 arm64 主机上构建 amd64 镜像
- 使用
--platform指定目标架构 - 使用
--push可以直接在 Docker Hub 上生成 multi-arch 镜像 - 验证
docker manifest inspect确认镜像支持多架构
💡 推荐实践
- 对于多平台镜像,尽量使用 一条命令直接构建并推送
- 避免手动 merge manifest list
- 确保 Hub 上旧 tag 已删除,避免生成
"architecture": "unknown"