Sobes.tech
Middle

Wat zijn multi-stage builds in Docker en hoe werken ze?

sobes.tech AI

Antwoord van AI

Meestapsgewijze builds maken het mogelijk om meerdere tijdelijke afbeeldingen te gebruiken tijdens het Docker-buildproces om een eindbeeld te verkrijgen dat geoptimaliseerd is.

Hoe het werkt:

  • Opsplitsing in fasen: Het buildproces wordt opgesplitst in meerdere fasen (FROM), elk erven van hun eigen basisafbeelding.
  • Kopiëren van artefacten: Bestanden en artefacten die in eerdere fasen zijn gemaakt, worden gekopieerd naar de volgende fasen met behulp van het commando COPY --from=<naam_van_fase of nummer>.
  • Eindbeeld: Het eindbeeld wordt gemaakt op basis van de laatste fase. Alleen de bestanden die expliciet uit eerdere fasen zijn gekopieerd, worden opgenomen. Tussenschillen en tools die in vroege fasen voor compilatie of testen zijn gebruikt, worden niet opgenomen in het eindbeeld.

Voordelen:

  • Vermindering van de afbeeldingsgrootte: Alleen de bestanden die nodig zijn om de applicatie uit te voeren, worden opgenomen in het eindbeeld.
  • Verbetering van de beveiliging: Bouwtools, compilers en andere potentieel kwetsbare componenten worden niet opgenomen in het eindbeeld.
  • Versnelling van de build: Tussenschillen kunnen worden gecachet.
  • Netheid van Dockerfile: Verschillende bouwfasen (compilatie, testen, verpakking) zijn logisch gescheiden.

Voorbeeld:

# Bouwfase: compilatie van de applicatie
FROM golang:1.20 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o myapp .

# Uitvoeringsfase: starten van de applicatie
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
CMD ["/app/myapp"]