Multi-stage build
Tecnica Dockerfile con più fasi: si compila in una fase «build» pesante e poi si copia solo l'artefatto finito in una fase finale pulita e minimale. Il risultato è un'immagine di produzione piccola e sicura, senza strumenti di build né codice sorgente.
Il problema: la compilazione richiede compilatori, strumenti e dipendenze che in produzione non servono (e non dovrebbero esserci), perché gonfiano l'immagine e aumentano la superficie d'attacco. Le fasi multiple lo risolvono: la prima (ad esempio FROM golang AS build) compila; la seconda, minimale (FROM alpine o distroless), si limita a un COPY --from=build del binario finito. Tutto lo scarto della compilazione resta nella fase di build e non finisce mai nell'immagine finale. Vantaggi: immagini drasticamente più piccole (un'app Go può passare da ~800 MB a ~10 MB), superficie d'attacco ridotta (niente compilatore o shell da sfruttare) e nessuna traccia di sorgenti o segreti del processo di build. Oggi è prassi standard per i container di produzione, spesso insieme a una base distroless. Legato a distroless e image layer.