多平台建置

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 中級

一起來練習吧!

Docker 中級

Preparing Video For Download...