Multiplattformsbyggen

Docker för medelnivå

Mike Metzger

Data Engineering Consultant

Multiplattform?

  • Vad innebär multiplattform?
    • Olika OS-typer
      • linux
      • windows
      • macos
    • Olika CPU-typer
      • x64_64 eller amd64
      • arm64
      • arm7
  • Anges vanligtvis som os/cpu, till exempel linux/amd64

Linux Tux-logotyp

AMD64-logotyp

ARM-logotyp

Docker för medelnivå

Skapa multiplattformsbyggen

  • Bygger på beteendet för flerstegskompilering
  • Det inledande byggsteget använder vanligtvis korskompilatorer och förlitar sig på värdsystemets arkitektur
  • Det slutliga steget använder arkitektur och OS för det avsedda målsystemet.
Docker för medelnivå

Dockerfile-alternativ för multiplattform

  • Byggsteget använder flaggan --platform=$BUILDPLATFORM
    • $BUILDPLATFORM representerar plattformen för värdsystemet som kör bygget
  • Ibland används direktivet ARG
    • Skickar lokala miljövariabler in i Dockers byggsystem
    • I det här fallet TARGETOS och TARGETARCH
    • ARG TARGETOS TARGETARCH
    • Miljövariablerna på värdsystemnivå kan definieras i förväg eller med kommandot env.
Docker för medelnivå

Multiplattformsexempel

# 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 för medelnivå

Bygga ett multiplattformsbygge

  • För att skapa ett multiplattformsbygge måste vi använda docker buildx med olika alternativ i stället för docker build
  • docker buildx erbjuder fler kommandon och funktioner än docker build, inklusive möjligheten att ange plattform

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

  • Innan bygget körs måste vi även ha en ny builder-container på plats. Det skapar du med kommandot docker buildx create --bootstrap --use.
Docker för medelnivå

Nu kör vi en övning!

Docker för medelnivå

Preparing Video For Download...