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