Multi-stage builds

Docker voor gevorderden

Mike Metzger

Data Engineering Consultant

Single-stage builds

  • Typische Docker-images worden gemaakt met één FROM-regel
  • Elke toevoeging aan de basisimage vergroot de omvang en bemoeilijkt beheer
  • Stel: een app moet eerst gecompileerd worden
    • Je kunt alle vereisten in de image zetten, compileren en de uiteindelijke image configureren
    • Dit laat vaak overbodige inhoud achter, ook als die niet wordt gebruikt
FROM ubuntu
RUN apt update
RUN apt install gcc -y
...
RUN make
CMD ["data_app"]
Docker voor gevorderden

Multi-stage builds

  • Multi-stage builds gebruiken meerdere containers
  • Meestal met één of meer buildstages
  • Eindcomponenten worden gekopieerd naar de definitieve containerimage
  • De buildstages worden daarna automatisch verwijderd
    • Bespaart ruimte en verkleint de image
  • Vereist extra syntax in de Dockerfile
    • AS <alias>
    • COPY --from=<alias>
Docker voor gevorderden

Voorbeeld van een multi-stage build

# Eerste buildstage maken
FROM ubuntu AS stage1

# Compiler installeren en code compileren RUN apt install gcc -y ... RUN make
# Nieuwe stage voor de uiteindelijke image FROM alpine-base
# Kopiëren van eerste stage naar final COPY --from=stage1 /data_app /data_app
# App starten bij containerstart CMD ["data_app"]
Docker voor gevorderden

Laten we oefenen!

Docker voor gevorderden

Preparing Video For Download...