首页/开发/CI/CD 与发布速查/多架构镜像(Manifest List / OCI Index)
构建与制品管理58 条

多架构镜像(Manifest List / OCI Index)

一个标签对应多架构镜像清单:拉取时按节点架构自动选择,ARM 与 x86 混合集群无需分开维护标签。

CI/CD 与发布速查开发更新于 2026-10-13

多架构镜像是什么

多架构镜像让一个镜像标签对应多种 CPU 架构:仓库里存的是清单列表(Docker manifest list 或 OCI image index),内部聚合各架构的镜像 manifest;拉取时运行时按节点架构自动挑对应版本,ARM 与 x86 混合集群、新式本地开发机都无需维护不同标签。构建用 docker buildx 一次指定多个 --platform 目标(如 linux/amd64、linux/arm64);多平台结果不能 load 进本地 docker,需要直接 push 到仓库或用导出格式;跨架构构建依赖 QEMU 模拟会显著变慢,高频项目建议用原生架构机器分别构建后再合并清单。

基本信息

构件manifest list / image index 聚合多架构 manifest
构建docker buildx --platform 指定多目标
查看docker buildx imagetools inspect 等
本地限制多平台结果需 push,不能 load 回本地
性能QEMU 模拟慢,原生架构构建更快

典型使用场景

  • ARM 云主机与 x86 服务器混部:同一标签两边都能拉。
  • 边缘设备:ARM 板与网关类硬件需要 arm 变体。
  • 本地开发:新式开发机直接拉取公开镜像的同名标签。
  • 开源发布:一次发布覆盖主流架构,用户无需自己构建。
  • 迁移验证:切换到 ARM 前先用双架构镜像做验证。
  • 统一产物:一处流水线构建,多环境拉同一个 tag。

buildx 构建推送

buildx 构建推送
docker buildx create --use --name multibuild
docker buildx build --platform linux/amd64,linux/arm64 \
  -t registry.example.com/app:1.8.0 --push .
docker buildx imagetools inspect registry.example.com/app:1.8.0  # 核对清单

平台字符串

值对应硬件场景
linux/amd64x86 64 位常规服务器
linux/arm64ARM 64 位ARM 云主机、新式开发机
linux/arm/v7ARM 32 位树莓派等设备
分开构建再直推同一 tag 会互相覆盖清单:要么一次 buildx 构建多平台,要么用 imagetools 合并清单。
基础镜像要先支持目标架构:上游缺 arm64 时构建直接失败,选型阶段就确认架构覆盖。
模拟构建慢的根因是 QEMU 指令翻译:编译型语言项目尽量用原生架构 runner 或交叉编译。
镜像大小按架构各自计算:清单本身只有几 KB,存储成本是各架构层之和,瘦身要逐架构做。
架构差异用 TARGETARCH 构建参数区分:Dockerfile 里按架构下载对应二进制,避免维护多份文件。

易错点

  • 只构建主架构:换到异构节点运行时报 exec format error;按部署目标补齐架构。
  • 本地 load 多平台结果:docker 不支持或结果不完整;多平台走 push 或导出。
  • 两个单架构 tag 冒充多架构:消费方行为随架构漂移;统一合并为清单列表。
  • 不配缓存:多平台构建耗时成倍增长;用 registry 缓存导出复用层。
  • 声称支持 ARM 却没在真机验证:运行时问题延后爆发;至少做冒烟级验证。

数据来源与参考

  • Docker Docs《Multi-platform images》
  • OCI Image Spec
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌