Passer au contenu principal

Expertise (Docker)

Docker multi-architecture

ARM est partout : Raspberry Pi, AWS Graviton, Oracle Ampere, Apple Silicon. Construire des images multi-arch permet de distribuer un seul tag qui fonctionne sur toutes les architectures. Le manifest OCI multi-platform gère la sélection automatique.

buildx et QEMU

# Vérifier les builders disponibles
docker buildx ls

# Créer un builder multi-plateforme
docker buildx create   --name multiarch   --driver docker-container   --bootstrap   --use

# Activer l'émulation QEMU (pour cross-compilation)
docker run --privileged --rm tonistiigi/binfmt --install all

# Vérifier les plateformes supportées
docker buildx inspect --bootstrap

Build et push multi-arch

# Build pour plusieurs architectures et push
docker buildx build   --platform linux/amd64,linux/arm64,linux/arm/v7   --tag ghcr.io/org/myapp:1.0.0   --tag ghcr.io/org/myapp:latest   --push   .

# Inspecter le manifest multi-arch
docker buildx imagetools inspect ghcr.io/org/myapp:latest

Dockerfile multi-arch

# BuildKit expose TARGETPLATFORM, TARGETOS, TARGETARCH automatiquement
FROM --platform=$BUILDPLATFORM golang:1.23-alpine AS builder
ARG TARGETARCH
ARG TARGETOS
WORKDIR /src
COPY . .
RUN GOOS=$TARGETOS GOARCH=$TARGETARCH     go build -o /app/server ./cmd/server

FROM gcr.io/distroless/static-debian12
COPY --from=builder /app/server /server
ENTRYPOINT ["/server"]

Avec cette approche, la compilation Go native se fait sur l'architecture du builder (amd64) et cross-compile vers la cible. Bien plus rapide que l'émulation QEMU pour les compilations longues.

Builds natifs via nodeselector

# Avec des nœuds ARM disponibles (ex: Mac M1 ou Pi dans un cluster)
docker buildx create   --name hybrid   --platform linux/amd64   node-amd64:2376

docker buildx create   --name hybrid   --append   --platform linux/arm64   node-arm64:2376

docker buildx use hybrid

# Build natif sur chaque architecture, pas d'émulation
docker buildx build   --platform linux/amd64,linux/arm64   --push   -t myapp:latest .

GitHub Actions multi-arch

- name: Build and push multi-arch
  uses: docker/build-push-action@v6
  with:
    platforms: linux/amd64,linux/arm64
    push: true
    tags: ghcr.io/${{ github.repository }}:latest
    cache-from: type=gha
    cache-to: type=gha,mode=max