Créations multiplateformes

Docker intermédiaire

Mike Metzger

Data Engineering Consultant

Multiplateforme ?

  • Que signifie multiplateforme ?
    • Différents systèmes d'exploitation
      • linux
      • windows
      • macos
    • Différents types de CPU
      • x64_64 ou amd64
      • arm64
      • arm7
  • Souvent noté comme os/cpu, p. ex. linux/amd64

Logo Tux de Linux

Logo AMD64

Logo ARM

Docker intermédiaire

Créer des créations multiplateformes

  • S'appuie sur des créations en étapes multiples
  • L'étape initiale/de création utilise souvent des compilateurs croisés et dépend de l'architecture de l'hôte
  • L'étape finale vise l'architecture/SE de la cible prévue.
Docker intermédiaire

Options Dockerfile multiplateformes

  • L'étape de création utilise l'indicateur --platform=$BUILDPLATFORM
    • $BUILDPLATFORM représente la plateforme de l'hôte qui exécute la création
  • Utilise parfois la directive ARG
    • Transmet des variables d'environnement locales au système de création Docker
    • Ici, TARGETOS et TARGETARCH
    • ARG TARGETOS TARGETARCH
    • Les variables d'environnement au niveau de l'hôte peuvent être définies d'avance ou avec la commande env.
Docker intermédiaire

Exemple multiplateforme

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

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

Générer une création multiplateforme

  • Pour créer une création multiplateforme, au lieu de docker build, utilisez docker buildx avec diverses options
  • docker buildx offre plus de commandes et de capacités que docker build, dont l'option de préciser une plateforme

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

  • Avant d'exécuter la création, vous devez aussi avoir un conteneur builder actif. Faites-le avec la commande docker buildx create --bootstrap --use.
Docker intermédiaire

Passons à la pratique !

Docker intermédiaire

Preparing Video For Download...