Kompilacje wieloplatformowe

Docker średnio zaawansowany

Mike Metzger

Data Engineering Consultant

Wieloplatformowość?

  • Co oznacza „wieloplatformowy"?
    • Różne typy systemów operacyjnych
      • linux
      • windows
      • macos
    • Różne typy procesorów
      • x64_64 lub amd64
      • arm64
      • arm7
  • Zazwyczaj zapisywane jako os/cpu, np. linux/amd64

Logo Linux Tux

Logo AMD64

Logo ARM

Docker średnio zaawansowany

Tworzenie kompilacji wieloplatformowych

  • Opiera się na mechanizmie kompilacji wieloetapowej
  • Etap początkowy / kompilacji zazwyczaj używa kompilatorów skrośnych i zależy od architektury systemu hosta
  • Etap końcowy używa architektury / systemu operacyjnego docelowego środowiska
Docker średnio zaawansowany

Opcje Dockerfile dla wielu platform

  • Etap kompilacji używa flagi --platform=$BUILDPLATFORM
    • $BUILDPLATFORM reprezentuje platformę hosta uruchamiającego kompilację
  • Czasami używana jest dyrektywa ARG
    • Przekazuje lokalne zmienne środowiskowe do systemu kompilacji Dockera
    • W tym przypadku: TARGETOS i TARGETARCH
    • ARG TARGETOS TARGETARCH
    • Zmienne środowiskowe na poziomie hosta można zdefiniować wcześniej lub za pomocą polecenia env.
Docker średnio zaawansowany

Przykład kompilacji wieloplatformowej

# 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 średnio zaawansowany

Tworzenie kompilacji wieloplatformowej

  • Aby utworzyć kompilację wieloplatformową, zamiast docker build należy użyć docker buildx z odpowiednimi opcjami
  • docker buildx oferuje więcej poleceń i możliwości niż docker build, w tym opcję określenia platformy

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

  • Przed uruchomieniem kompilacji należy również utworzyć nowy kontener builder. Służy do tego polecenie docker buildx create --bootstrap --use.
Docker średnio zaawansowany

Czas na ćwiczenia!

Docker średnio zaawansowany

Preparing Video For Download...