Docker编译多系统架构镜像
Docker 19.03以上版本可以使用 docker buildx build命令使用BuildKit构建镜像。该命令支持--platform参数可以同时构建多种系统架构的Docker镜像。
新建builder实例
Docker for Linux不支持构建arm架构镜像,可以运行一个新的容器让其支持该特性,Docker Desktop版本无需进行此项设置。
1  | docker run --rm --privileged tonistiigi/binfmt:latest --install all  | 
由于Docker默认的build实例不支持同时指定多个 --platform,必须首先创建一个新的builder实例。
1  | # 适用于国内环境  | 
构建镜像
1  | FROM --platform=$TARGETPLATFORM alpine  | 
1  | docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t {镜像名称} . --push  | 
--push 参数表示将构建好的镜像推送到Docker仓库
架构相关变量
TARGETPLATFORM
构建镜像的目标平台,例如 linux/amd64,linux/arm/v7,windows/amd64
TARGETOS
构建镜像的OS类型,例如 linux,windows
TARGETARCH
构建镜像的架构类型,例如 amd64,arm
BUILDPLATFORM
构建镜像主机平台,例如 linux/amd64
BUILDOS
构建镜像主机的OS类型,例如 linux
BUILDARCH
构建镜像主机的架构类型,例如 amd64
BUILDVARIANTBUILDPLATFORM的变种,该变量可能为空,例如 v7
使用举例
例如要构建 linux/arm/v7和 linux/amd64两种架构的镜像
1  | FROM docker.io/library/python:3.10-alpine  |