Budowanie wieloetapowe
Technika w Dockerfile z kilkoma etapami: kompilacja odbywa się w ciężkim etapie „build”, a do czystego, minimalnego etapu końcowego kopiuje się tylko gotowy artefakt. Wynik: mały, bezpieczny obraz produkcyjny bez narzędzi budowania i kodu źródłowego.
Problem: budowanie wymaga kompilatorów, narzędzi i zależności, których na produkcji nie potrzeba (i nie powinno być), bo tylko pompują obraz i powiększają powierzchnię ataku. Rozwiązanie: pierwszy etap (np. FROM golang AS build) kompiluje; drugi, minimalny (FROM alpine lub distroless) wykonuje jedynie COPY --from=build gotowej binarki. Cały bałagan po budowaniu zostaje w etapie build i nigdy nie trafia do obrazu końcowego. Zysk: radykalnie mniejsze obrazy (aplikacja w Go potrafi spaść z ok. 800 MB do ok. 10 MB), mniejsza powierzchnia ataku (brak kompilatora i powłoki do wykorzystania) oraz brak śladów kodu źródłowego i sekretów z procesu budowania. Dziś standard w kontenerach produkcyjnych, często razem z bazą distroless.