Docker-images optimaliseren

Docker voor gevorderden

Mike Metzger

Data Engineering Consultant

Uitleg Docker-image

  • Docker-images zijn de basis van een container
  • Bevatten alle content die een container-instance initieel heeft
Docker voor gevorderden

Aandachtspunten voor Docker-images

  • Verleidelijk om alle mogelijke componenten in één image te stoppen
  • Groot en onhandig qua omvang
  • Security/updates lastig door afhankelijkheden
  • Moeilijker om containers te combineren zonder ruimte-/bandbreedteverspilling
Docker voor gevorderden

Aanbevelingen voor Docker-images

  • Splits containers tot het minimaal nodige
  • Makkelijker meerdere containers te combineren dan één groot image bouwen
  • Zoals
    • bouwen met herbruikbare componenten
    • vs. telkens from scratch bouwen
  • Updates aan specifieke software raken alleen containers met dat image
  • Optimaliseren voor grootte maakt gebruik en distributie veel makkelijker
Docker voor gevorderden

Voorbeeld: image opsplitsen

  • Stel: een data-engineeringproject met:

    • PostgreSQL-database
    • Python-ETL-software
    • Webserversoftware
  • Eén image kan, maar dan moet je het elke keer updaten bij ETL- of webserverwijzigingen.

  • Wat als je nog een webserver moet toevoegen?
FROM ubuntu
RUN apt update
RUN apt install -y postgresql
RUN apt install -y nginx
RUN apt install -y python3.9
...
Docker voor gevorderden

Voorbeeld met minimale containers

  • Betere keuzes met Docker
  • Splits elk onderdeel in een eigen container
    • PostgreSQL-databasecontainer
    • Python-ETL-componenten
    • Webserver
  • Bouw een geoptimaliseerde config voor ons gebruik; onderdelen kun je toevoegen/verwijderen
bash> docker run -d postgresql:latest

bash> docker run -d nginx:latest ...
Docker voor gevorderden

Imagegrootte bepalen

  • Met docker images
  • Toont details per image, incl. grootte
  • Meer opties later besproken

bash> docker images

REPOSITORY      TAG              SIZE
postgres        latest           448MB
postgres        15               442MB
apache/airflow  2.7.1-python3.9  1.4GB
alpine          latest           7.73MB
Docker voor gevorderden

Laten we oefenen!

Docker voor gevorderden

Preparing Video For Download...