Build-uri multi-platformă

Docker intermediar

Mike Metzger

Data Engineering Consultant

Multi-platformă?

  • Ce înseamnă multi-platformă?
    • Tipuri diferite de SO
      • linux
      • windows
      • macos
    • Tipuri diferite de CPU
      • x64_64 sau amd64
      • arm64
      • arm7
  • De obicei exprimat ca os/cpu, de exemplu linux/amd64

Logo Linux Tux

Logo AMD64

Logo ARM

Docker intermediar

Crearea build-urilor multi-platformă

  • Se bazează pe comportamentul build-urilor în mai multe etape
  • Etapa inițială / de build folosește compilatoare încrucișate și depinde de arhitectura sistemului gazdă
  • Etapa finală folosește arhitectura / SO pentru ținta dorită.
Docker intermediar

Opțiuni Dockerfile pentru multi-platformă

  • Etapa de build folosește indicatorul --platform=$BUILDPLATFORM
    • $BUILDPLATFORM reprezintă platforma sistemului gazdă care rulează build-ul
  • Uneori se utilizează directiva ARG
    • Transmite variabile de mediu locale în sistemul de build Docker
    • În acest caz, TARGETOS și TARGETARCH
    • ARG TARGETOS TARGETARCH
    • Variabilele de mediu la nivelul gazdei pot fi definite anterior sau prin comanda env.
Docker intermediar

Exemplu 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 intermediar

Crearea unui build multi-platformă

  • Pentru un build multi-platformă, în loc de docker build, se utilizează docker buildx cu opțiuni specifice
  • docker buildx oferă mai multe comenzi și capabilități față de docker build, inclusiv posibilitatea de a specifica platforma

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

  • Înainte de a rula build-ul, trebuie creat un nou container builder. Aceasta se realizează cu comanda docker buildx create --bootstrap --use.
Docker intermediar

Să exersăm!

Docker intermediar

Preparing Video For Download...