Containerisierung
Docker: der ganze Stack als Code, pro Kunde klonbar.
Jeder Dienst läuft isoliert in seinem eigenen Container; ein Befehl bringt alles in definierter Reihenfolge hoch. Warum wir containerisieren, was Docker ausmacht und wie ein docker compose up den Stack startet – ephemer im Prozess, persistent im Volume.
Warum Docker
Reproduzierbar · isoliert · portabelOhne Container installiert man Dienste direkt auf den Host – mit kollidierenden Abhängigkeiten, „works on my machine“ und einem Zustand, der sich kaum sauber klonen lässt. Container drehen das um: Jeder Dienst bringt seine eigene Umgebung mit, der ganze Stack wird zu Code und lässt sich identisch auf dem Mac, auf Hetzner und beim Kunden hochfahren.
Direkt auf dem Host
Ein Python für dbt, ein anderes für Dagster – Versionskonflikte. Jede Umgebung leicht anders, der Zustand vermischt sich mit dem System.
Container (Docker)
Jeder Dienst isoliert mit eigenen Abhängigkeiten. Der Stack ist eine Datei, identisch überall – und pro Engagement klonbar.
Reproduzierbar
Der Stack als eine Datei
Eine compose.yml beschreibt alle Dienste. Identisch auf jeder Maschine – das Fundament des Clone-per-Client-Modells.
Isoliert
Kein Abhängigkeits-Konflikt
Jeder Container hat seine eigenen Bibliotheken und Versionen. Was in dem einen läuft, stört den anderen nicht.
Deklarativ
Ein Befehl, definierte Reihenfolge
docker compose up bringt alles hoch – mit depends_on und Healthchecks in der richtigen Reihenfolge.
Overlay
Security steckt an, ohne den Core zu ändern
Ein docker-compose.override.yml legt Authentik & Co. über den Core. Der Kern bleibt portabel und perimeter-agnostisch.
Ehrlich · was Docker nicht löst
Docker ist keine Skalierungs-Silberkugel – echtes Auto-Scaling über viele Hosts ist Kubernetes-Territorium. Das Netzwerk hat Tücken: Docker umgeht die Host-Firewall via iptables, deshalb müssen Dienste bewusst an 127.0.0.1 gebunden werden. Und Zustand braucht Planung – er gehört in Volumes, nicht in den Container.
Was ist Docker
Build-Zeit · LaufzeitEine Container-Plattform. Ein Image ist ein unveränderliches Bündel aus App und Abhängigkeiten, in gecachten Layern gebaut. Ein Container ist eine laufende, isolierte Instanz davon. Compose beschreibt mehrere Container deklarativ als Services – der Docker-Daemon führt alles aus.
Artefakte
Orchestrierung
Wie der Stack hochfährt
läuft · Endlosschleifedocker compose up verschmilzt Core- und Overlay-Datei, legt Network und Volume an und startet die Container in Abhängigkeitsreihenfolge: erst die Persistenz (Postgres am Volume), dann die App-Container. Jeder ist unabhängig – fällt einer aus, laufen die anderen weiter.
ufw über eigene iptables-Regeln. Alle Dienste sind an 127.0.0.1 gebunden – sonst wären sie trotz Firewall von außen offen. Nach außen published nur der Ingress.# docker-compose.yml · Core services: postgres # volume: pgdata dagster dbt metabase # docker-compose.override.yml · Overlay services: authentik → Security-Overlay # = effective config ✓ 5 services
“Container sind ephemer – Volumes bleiben.”
— Prozess vs. State