多平台构建

Docker 进阶

Mike Metzger

Data Engineering Consultant

多平台?

  • 多平台是什么意思?
    • 不同操作系统
      • linux
      • windows
      • macos
    • 不同 CPU 架构
      • x64_64amd64
      • arm64
      • arm7
  • 通常记为 os/cpu,如 linux/amd64

Linux Tux 标志

AMD64 标志

ARM 标志

Docker 进阶

创建多平台构建

  • 基于多阶段构建机制
  • 初始/构建阶段常用交叉编译器,依赖宿主机架构
  • 最终阶段使用目标的架构/操作系统
Docker 进阶

多平台 Dockerfile 选项

  • 构建阶段使用 --platform=$BUILDPLATFORM 标志
    • $BUILDPLATFORM 表示运行构建的宿主平台
  • 有时使用 ARG 指令
    • 将本地环境变量传入 Docker 构建系统
    • 此处为 TARGETOSTARGETARCH
    • ARG TARGETOS TARGETARCH
    • 宿主机层的环境变量可预先定义或用 env 命令设置
Docker 进阶

多平台示例

# 初始阶段,使用本地平台
FROM --platform=$BUILDPLATFORM golang:1.21 AS build

# 复制源码 WORKDIR /src COPY . .
# 从宿主获取环境变量 ARG TARGETOS TARGETARCH
# 使用 ARG 变量编译 RUN env GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /final/app .
# 创建容器并加载交叉编译产物 FROM alpine COPY --from=build /final/app /bin
Docker 进阶

构建多平台镜像

  • 要创建多平台构建,不用 docker build,而用带选项的 docker buildx
  • docker buildxdocker build 提供更多命令和功能,可指定平台

docker buildx build --platform linux/amd64,linux/arm64 -t multi-platform-app .

  • 构建前需先创建新的 builder 容器:使用 docker buildx create --bootstrap --use 命令
Docker 进阶

Passons à la pratique !

Docker 进阶

Preparing Video For Download...