Docker-Images optimieren

Docker für Fortgeschrittene

Mike Metzger

Data Engineering Consultant

Erklärung zu Docker-Images

  • Docker-Images sind die Basis eines Containers
  • Enthalten alles, was einer Containerinstanz anfangs zur Verfügung steht
Docker für Fortgeschrittene

Bedenken bei Docker-Images

  • Verlockend, alle potenziell nötigen Komponenten ins Image zu packen
  • Größe wird groß/ungelenk
  • Sicherheits-/Update-Aufwand wegen Abhängigkeiten schwierig
  • Schwerer, Container zu kombinieren, ohne Platz/Bandbreite zu verschwenden
Docker für Fortgeschrittene

Empfehlungen für Docker-Images

  • Container so klein wie nötig aufteilen
  • Leichter, später mehrere Container zu kombinieren, statt ein großes Image zu bauen
  • Wie
    • mit wiederverwendbaren Komponenten bauen
    • statt jedes Mal von Grund auf
  • Updates für bestimmte Software betreffen nur Container mit diesem Image, nicht alle
  • Für Größe optimieren, Nutzung und Verteilung werden viel einfacher
Docker für Fortgeschrittene

Beispiel: Docker-Image aufteilen

  • Stell dir ein Data-Engineering-Projekt mit folgender Software vor:

    • PostgreSQL-Datenbank
    • Python-ETL-Software
    • Webserver-Software
  • Ein einzelnes Image ist möglich, aber wir müssten es bei jedem ETL- oder Webserver-Update neu bauen.

  • Was, wenn wir einen weiteren Webserver hinzufügen müssten?
FROM ubuntu
RUN apt update
RUN apt install -y postgresql
RUN apt install -y nginx
RUN apt install -y python3.9
...
Docker für Fortgeschrittene

Beispiel mit minimalen Containern

  • Bessere Optionen mit Docker
  • Jede Komponente in einen eigenen Container splitten
    • PostgreSQL-Datenbank-Container
    • Python-ETL-Komponenten
    • Webserver
  • Konfiguration für unseren Zweck optimieren; Komponenten nach Bedarf hinzufügen/entfernen
bash> docker run -d postgresql:latest

bash> docker run -d nginx:latest ...
Docker für Fortgeschrittene

Image-Größe ermitteln

  • Mit docker images
  • Zeigt Details zu einzelnen Images, inkl. Größe
  • Ausführlichere Optionen kommen später

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 für Fortgeschrittene

Lass uns üben!

Docker für Fortgeschrittene

Preparing Video For Download...