mac下开启docker buildx多平台构建

1.支持 multi-platform 的 builder

1
docker buildx create --name multi --driver docker-container --use

2.初始化

1
docker buildx inspect --bootstrap

再看一眼:

1
2
docker buildx ls
docker buildx ls --no-trunc

你应该会看到类似:

multi*       docker-container

driver 变成 docker-container 才是正确状态。


3.构建

1
2
3
4
5
6
7
8
9
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t ob:0.9 \
--push .

# load两个平台需要分开构建(镜像存储在本地)
docker buildx build --platform linux/amd64 --load -t myimage:amd64 .

docker buildx build --platform linux/arm64 --load -t myimage:arm64 .

注意:

  • 多架构必须 --push
  • 或单架构用 --load

因为 multi-arch 生成的是 manifest list,本地 daemon 无法直接 load 两种架构。

你现在看到的 PLATFORMS:

linux/amd64, linux/arm64 ...

表示:

这个 daemon 可以运行这些架构的镜像(通过 QEMU)

但不代表:

它可以一次构建多个架构产物

构建能力取决于 driver,而不是 daemon。


结构对比一下:

构建过程状态

M1 arm64
↓
buildx (docker-container driver)
↓
BuildKit container
↓
QEMU
↓
multi-arch manifest

当 driver 变成 docker-container,你就进入真正的跨架构构建模式。