多架构镜像
什么是多架构镜像
多架构镜像(Multi-architecture Image)是指一个镜像 tag 下包含多个架构版本。当用户在 x86 机器上 pull 镜像时,Docker 自动下载 amd64 版本;在 ARM 机器上则自动下载 arm64 版本。
myapp:latest (manifest list)
├── linux/amd64 (sha256:abc...)
├── linux/arm64 (sha256:def...)
└── linux/arm/v7 (sha256:ghi...)
多架构镜像的工作原理
OCI Image Index
多架构镜像基于 OCI Image Index(或 Docker Manifest List)规范。
{
"schemaVersion": 2,
"mediaType": "application/vnd.oci.image.index.v1+json",
"manifests": [
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"platform": {"os": "linux", "architecture": "amd64"},
"digest": "sha256:abc123..."
},
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"platform": {"os": "linux", "architecture": "arm64"},
"digest": "sha256:def456..."
}
]
}
pull 过程
# 用户只需
docker pull myapp:latest
# Docker 自动完成
# 1. 拉取 manifest list
# 2. 根据当前系统架构选择对应的 manifest
# 3. 拉取对应的镜像层
创建多架构镜像
方式一:Buildx(推荐)
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t registry.example.com/myapp:latest \
--push .
方式二:手动合并 Manifest
# 分别构建
docker build --platform linux/amd64 -t myapp:amd64 .
docker build --platform linux/arm64 -t myapp:arm64 .
# 推送到仓库
docker push myapp:amd64
docker push myapp:arm64
# 创建 manifest list
docker manifest create myapp:latest \
myapp:amd64 \
myapp:arm64
# 推送 manifest list
docker manifest push myapp:latest
方式三:使用 manifest-tool
manifest-tool push from-spec manifest.yaml
验证多架构镜像
# 查看 manifest
docker manifest inspect myapp:latest
# 查看支持的架构
docker buildx imagetools inspect myapp:latest
输出:
Name: docker.io/myapp:latest
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest: sha256:xyz...
Manifests:
linux/amd64 digest: sha256:abc...
linux/arm64 digest: sha256:def...
常见问题
Q1: 如何在特定架构上测试?
# 指定平台拉取
docker pull --platform linux/arm64 myapp:latest
# 指定平台运行
docker run --platform linux/arm64 myapp:latest uname -m
Q2: 旧版 Docker 不支持多架构怎么办?
# 需要手动指定架构 tag
docker pull myapp:latest-amd64
docker pull myapp:latest-arm64
Q3: 基础镜像验证
# 确认基础镜像支持哪些架构
docker buildx imagetools inspect node:18
面试要点
- 多架构镜像通过 OCI Image Index(Manifest List)实现一个 tag 多架构
- Docker 客户端会根据运行时
uname -m自动选择合适的架构 - 推荐使用 Buildx 构建,手动 manifest 操作容易出错
- 老版本 Docker(< 18.06)不支持 manifest list 自动选择
- 国内公有云(阿里云 ACR、华为云 SWR)已全面支持多架构镜像
面试官常问:多架构镜像的底层存储结构是怎样的?客户端是怎么选择对应架构的?
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容