什么是Docker多架构容器镜像

发布于:2025-02-15 ⋅ 阅读:(33) ⋅ 点赞:(0)

什么是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 远程镜像仓库来查看构建的多架构镜像信息

get-cpu-os-v4-multi-github


网站公告

今日签到

点亮在社区的每一天
去签到