Containerisierung

Containerisierung ist eine Virtualisierungstechnologie, bei der Anwendungen zusammen mit allen Abhängigkeiten in isolierte, portable Einheiten – Container – verpackt werden. Docker ist das meistgenutzte Container-Tool und wird häufig in CI/CD -Pipelines eingesetzt. Container stellen sicher, dass eine Anwendung auf jedem System identisch läuft – ein entscheidender Vorteil für stabile Deployment -Prozesse.

Warum Container in der Webentwicklung?

Container eliminieren Umgebungsunterschiede zwischen Entwicklung, Staging und Produktion. Ein Docker-Image enthält Betriebssystem-Schicht, Runtime, Bibliotheken und Anwendungscode. Das gleiche Image läuft identisch auf dem Entwickler-Laptop, im CI/CD -System und auf dem Produktionsserver. In Kombination mit Deployment -Automatisierung entstehen reproduzierbare Release-Prozesse.

Docker-Grundlagen: Image, Container, Registry

Dockerfile: Bauanleitung für ein Image – definiert Base-Image, Abhängigkeiten, Build-Schritte und Startbefehl. Image: Unveränderlicher Snapshot einer Anwendung inklusive aller Abhängigkeiten. Container: Laufende Instanz eines Images mit eigenem Dateisystem und Netzwerk. Registry: Zentraler Speicher für Images (Docker Hub, GitHub Container Registry, private Registries). Docker Compose orchestriert mehrere Container für lokale Entwicklungsumgebungen.

Container-Sicherheit und Best Practices

Minimale Base-Images verwenden (Alpine, Distroless). Container als Non-Root-User ausführen. Multi-Stage-Builds für kleinere Produktions-Images. Keine Secrets in Images backen – stattdessen über Umgebungsvariablen oder Secret Management zur Laufzeit injizieren. Images regelmäßig auf Schwachstellen scannen (Trivy, Snyk). Read-Only-Dateisysteme wo möglich aktivieren.

Container-Orchestrierung mit Kubernetes

Für Produktionsumgebungen mit mehreren Containern wird Kubernetes als Orchestrierungsplattform eingesetzt. Kubernetes verwaltet Skalierung, Load Balancing, Rolling Updates und Self-Healing automatisch. Für kleinere Projekte reicht Docker Compose mit einem Reverse Proxy als Einstiegspunkt.

Wie wir es einsetzen

Unser Standard-Setup definiert per Docker Compose den kompletten Stack: Angular-Frontend, Django-Backend, PostgreSQL, Redis und Celery. Für jeden Service existiert ein Multi-Stage-Dockerfile mit Alpine-Base-Image und Non-Root-User. Lokale Entwicklung und CI-Umgebung nutzen dasselbe Image, wodurch "Works on my machine"-Probleme entfallen. Umgebungsvariablen werden per .env-Datei injiziert, sensible Werte über Secret Management getrennt verwaltet.