什么是Docker多架构容器镜像
什么是Docker多架构容器镜像
在 Docker 中,同一个 Docker 镜像可以在不同的平台上运行,例如在 x86、ARM、PowerPC 等不同的 CPU 架构上。
为了支持这种多平台的镜像构建和管理,Docker 在 17.06
版本时引入了 Manifest 的概念,在此之前,Docker 并没有原生支持多平台镜像的构建和管理,因此开发者需要手动构建和管理不同平台的镜像。
多架构镜像实际上是多个镜像的集合,
多架构镜像 = 多个单架构镜像的集合
├── amd64 架构镜像
├── arm64 架构镜像
├── s390x 架构镜像
└── ppc64le 架构镜像
镜像存储
- 每个架构版本独立存储
- 共享镜像标签
- 运行时自动选择
拉取机制, 使用多架构镜像,会自动识别当前环境架构。
# 自动匹配架构
docker pull myimage:latest
技术实现
- Manifest List 机制
- 每个架构对应独立镜像
- 统一镜像名称管理
构建示例
A. 手动构建多架构镜像
# 构建多架构镜像
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t myimage:latest \
--push .
B. Dockerfile 多阶段构建
FROM --platform=$TARGETPLATFORM ubuntu:latest
# 根据目标平台动态处理
RUN if [ "$TARGETARCH" = "amd64" ]; then \
echo "x86 specific setup"; \
elif [ "$TARGETARCH" = "arm64" ]; then \
echo "ARM specific setup"; \
fi
如何判断是不是多架构镜像
docker manifest inspect
命令默认查看远端镜像的架构信息。
docker manifest inspect registry.access.redhat.com/ubi9 | grep architecture
"architecture": "amd64",
"architecture": "arm64",
"architecture": "s390x",
"architecture": "ppc64le",
manifest inspect
查询远端,image inspect
查询本地。
# 先拉取镜像
docker pull registry.access.redhat.com/ubi9
# 再查看本地镜像架构
docker image inspect registry.access.redhat.com/ubi9 | grep Architecture
本地也可以运行容器查看
# 查看本机架构
uname -m
# 运行时检查
docker run --rm registry.access.redhat.com/ubi9 arch
除了使用命令行查看,也可以通过访问 hub.docker.com 远程镜像仓库来查看构建的多架构镜像信息