Build multi‑platform

Docker Tingkat Menengah

Mike Metzger

Data Engineering Consultant

Multi‑platform?

  • Apa arti multi‑platform?
    • Jenis OS berbeda
      • linux
      • windows
      • macos
    • Jenis CPU berbeda
      • x64_64 atau amd64
      • arm64
      • arm7
  • Biasanya ditulis sebagai os/cpu, mis. linux/amd64

Logo Linux Tux

Logo AMD64

Logo ARM

Docker Tingkat Menengah

Membuat build multi‑platform

  • Dibangun di atas perilaku multi‑stage build
  • Tahap awal/build cenderung memakai cross‑compiler dan bergantung pada arsitektur host
  • Tahap akhir memakai arsitektur/OS target
Docker Tingkat Menengah

Opsi Dockerfile multi‑platform

  • Tahap build memakai flag --platform=$BUILDPLATFORM
    • $BUILDPLATFORM adalah platform host yang menjalankan build
  • Kadang memakai direktif ARG
    • Meneruskan variabel lingkungan lokal ke sistem build Docker
    • Dalam kasus ini, TARGETOS dan TARGETARCH
    • ARG TARGETOS TARGETARCH
    • Variabel lingkungan di level host bisa didefinisikan sebelumnya atau via perintah env.
Docker Tingkat Menengah

Contoh multi‑platform

# Initial stage, using local platform
FROM --platform=$BUILDPLATFORM golang:1.21 AS build

# Copy source into place WORKDIR /src COPY . .
# Pull the environment variables from the host ARG TARGETOS TARGETARCH
# Compile code using the ARG variables RUN env GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /final/app .
# Create container and load the cross-compiled code FROM alpine COPY --from=build /final/app /bin
Docker Tingkat Menengah

Membuat build multi‑platform

  • Untuk membuat build multi‑platform, alih‑alih docker build, gunakan docker buildx dengan opsi terkait
  • docker buildx menyediakan lebih banyak perintah dan kemampuan dibanding docker build, termasuk menentukan platform

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

  • Sebelum menjalankan build, kita juga harus menyiapkan kontainer builder baru. Gunakan perintah docker buildx create --bootstrap --use.
Docker Tingkat Menengah

Ayo berlatih!

Docker Tingkat Menengah

Preparing Video For Download...