Builds multi-étapes

Un Dockerfile multi-étapes contient plusieurs lignes FROM : les premières étapes compilent avec toute la chaîne d'outils, la dernière ne copie que le résultat. Compilateurs et sources n'arrivent jamais dans l'image finale.

Comment ça marche

Nomme une étape avec FROM golang:1.22 AS build, puis COPY --from=build /out/api /api dans une étape suivante. Seule la dernière étape, ou celle choisie avec --target, devient l'image ; les autres restent dans le cache de build.

Ce qui casse

La dernière étape doit contenir ce dont le programme a besoin pour tourner. Un binaire lié à la glibc ne démarre pas sur alpine ou scratch (« no such file or directory »), et une application Node.js a besoin de node dans l'image de base finale.

Dans un Dockerfile

FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /out/api ./cmd/api

FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=build /out/api /api
ENTRYPOINT ["/api"]

Regarde-le casser, puis répare-le

Écris le Dockerfile ou le fichier compose, tape les commandes docker, et regarde un serveur simulé les exécuter à travers redémarrages, mises à jour et trafic. Gratuit pour commencer.