Compilations multiplateformes

Docker : niveau intermédiaire

Mike Metzger

Data Engineering Consultant

Multiplateforme ?

  • Que signifie « multiplateforme » ?
    • Différents types d'OS
      • linux
      • windows
      • macos
    • Différents types de CPU
      • x64_64 ou amd64
      • arm64
      • arm7
  • Généralement noté os/cpu, par ex. linux/amd64

Logo Linux Tux

Logo AMD64

Logo ARM

Docker : niveau intermédiaire

Créer des builds multiplateformes

  • S'appuie sur les builds multi-étapes
  • L'étape initiale/de build utilise souvent des cross-compilateurs et dépend de l'architecture de l'hôte
  • L'étape finale cible l'architecture/l'OS visé
Docker : niveau intermédiaire

Options Dockerfile multiplateformes

  • L'étape de build utilise l'option --platform=$BUILDPLATFORM
    • $BUILDPLATFORM correspond à la plateforme de l'hôte qui exécute le build
  • Utilise parfois la directive ARG
    • Transmet les variables d'environnement locales au système de build Docker
    • Ici, TARGETOS et TARGETARCH
    • ARG TARGETOS TARGETARCH
    • Les variables d'environnement au niveau de l'hôte peuvent être définies en amont ou via la commande env.
Docker : niveau intermédiaire

Exemple multiplateforme

# Étape initiale, utilisation de la plateforme locale
FROM --platform=$BUILDPLATFORM golang:1.21 AS build

# Copier le code source WORKDIR /src COPY . .
# Récupérer les variables d'environnement de l'hôte ARG TARGETOS TARGETARCH
# Compiler le code avec les variables ARG RUN env GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /final/app .
# Créer le conteneur et charger le binaire cross-compilé FROM alpine COPY --from=build /final/app /bin
Docker : niveau intermédiaire

Construire un build multiplateforme

  • Pour créer un build multiplateforme, au lieu de docker build, utilisez docker buildx avec les options adaptées
  • docker buildx offre plus de commandes et de capacités que docker build, dont la spécification de la plateforme

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

  • Avant d'exécuter le build, vous devez aussi créer un conteneur builder. Faites-le avec docker buildx create --bootstrap --use.
Docker : niveau intermédiaire

Passons à la pratique !

Docker : niveau intermédiaire

Preparing Video For Download...