docker buildx 是 Docker 提供的一个扩展工具,增强了 Docker 的构建功能,特别是在跨平台和多架构镜像构建方面。buildx 的全称是 Docker Build Extensions,它基于 Moby 项目的 buildkit 构建器,支持更加高效的镜像构建。

以下是 docker buildx 的一些关键特点和功能:

  1. 多架构镜像构建:docker buildx 允许用户在单个构建中生成多架构的镜像。例如,你可以构建适用于 amd64、arm64 等不同架构的镜像,而无需在不同的环境中构建。
  2. 分布式构建:使用 docker buildx,你可以设置分布式构建,通过多节点并行构建镜像。这在大型项目或需要构建大量镜像时可以显著加快速度。
  3. 构建缓存优化:docker buildx 支持更先进的缓存机制,允许你在构建镜像时更好地利用缓存,减少不必要的重复构建,提升构建效率。
  4. 外部存储缓存:构建缓存可以导出到外部存储(比如文件系统或远程存储服务),并在其他构建任务中复用,进一步提升构建速度和效率。
  5. 推送多个镜像:在构建完成后,你可以一次性将多个架构的镜像推送到 Docker 镜像仓库中,而无需单独为每个架构推送镜像。
  6. 实验性功能支持:docker buildx 允许用户启用一些 Docker 目前实验中的新功能,并在真实项目中进行测试。

实践

1. 安装 tonistiigi/binfmt

1
docker run --rm --privileged tonistiigi/binfmt:latest --install all

2. 改造 Dockerfile

Dockerfile 中的 from XXX 语句,需要调整为 FROM --platform=$TARGETPLATFORM alpine

3. 构建 & 推送

fangqk1991/puppeteer-api 构建为例

1
2
3
docker buildx build \
--platform linux/arm64,linux/amd64 \
-t fangqk1991/puppeteer-api . --push

参考链接