在 macOS 上使用 buildx 构建多架构 Docker 镜像

本文使用 Apple silicon 的 Arm 架构 Mac(M1、M2 等),对于 x86 的 Windows 应该也适用。
请确保已经安装 Docker

Buildx 配置

Buildx 默认使用 docker driver 的驱动器,不支持多架构构建[1],但是我们可以创建一个 docker-container driver 的驱动器来实现多架构构建。

# Shell

# 创建一个新的构建器
docker buildx create \
  --name multiarch-builder \
  --driver docker-container

# 切换使用这个构建器
docker buildx use multiarch-builder

# 启动构建器
docker buildx inspect --bootstrap

构建镜像

使用 Buildx 构建时,不需要对原有的 Dockerfile 做任何修改,直接使用 buildx 构建并且指定平台即可

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t <镜像tag> \
  --push \
  .

上面的参数中添加了–push,因为 docker-container driver 的构建器需要显式指定执行的操作。
--push 构建完以后直接推送。如果打包多平台,直接加上这个参数推送即可。
--load 构建完以后加载到本地 Docker 镜像中。如果打包了多平台,不能使用 load。
--output 不常用,指定镜像输出方式。

使用 buildx 指定了多个架构打包以后,会把不同架构的镜像放在一个 manifest 里,拉取的时候直接使用你的 tag 就可以了。Docker 会拉取的时候自己决定具体拉取的是哪一个镜像

上一篇