Docker ist eine Container-Plattform, die Anwendungen mit allen Abhängigkeiten, Konfigurationen und Laufzeitumgebungen in standardisierte, portable Einheiten verpackt. Diese Container laufen isoliert und reproduzierbar auf jedem System, das Docker installiert hat. Seit der Veröffentlichung 2013 hat Docker die Art und Weise, wie Software entwickelt, getestet und ausgeliefert wird, grundlegend verändert.
In der Webentwicklung löst Docker eines der hartnäckigsten Probleme: die Konsistenz zwischen Entwicklung und Produktion. Wenn eine Anwendung im Docker-Container auf dem Laptop eines Entwicklers läuft, läuft sie auch auf dem Produktionsserver — mit exakt den gleichen Versionen aller Abhängigkeiten, Betriebssystem-Bibliotheken und Konfigurationen.
Wie Docker funktioniert
Images und Container
Ein Docker Image ist eine Blaupause, die alle Anweisungen zum Erstellen eines Containers enthält: Basis-Betriebssystem, installierte Software, Anwendungscode und Konfiguration. Ein Container ist eine laufende Instanz eines Images.
| Konzept | Analogie | Beschreibung |
|---|---|---|
| Dockerfile | Bauplan | Textdatei mit Anweisungen zum Erstellen eines Images |
| Image | Fertighaus-Vorlage | Unveränderliche Vorlage mit allen Abhängigkeiten |
| Container | Bewohntes Haus | Laufende Instanz eines Images |
| Registry | Baumarkt | Speicher für Images (z. B. Docker Hub) |
| Volume | Externer Speicher | Persistente Daten, die Container überleben |
Docker vs. Virtuelle Maschinen
| Eigenschaft | Docker Container | Virtuelle Maschine |
|---|---|---|
| Startzeit | Sekunden | Minuten |
| Ressourcenverbrauch | MB (nur App + Deps) | GB (komplettes OS) |
| Isolation | Prozess-Level (geteilter Kernel) | Hardware-Level (eigener Kernel) |
| Portabilität | Hoch (überall wo Docker läuft) | Mittel (Hypervisor-abhängig) |
| Density | Hunderte Container pro Host | Dutzende VMs pro Host |
Docker in der Webentwicklung
Lokale Entwicklungsumgebungen
Docker eliminiert das "Works on my machine"-Problem. Jeder Entwickler im Team arbeitet in der exakt gleichen Umgebung:
- Gleiche Node.js-Version, gleiche System-Libraries
- Gleiche Datenbankversion mit gleicher Konfiguration
- Gleiche Redis-, Elasticsearch- oder andere Service-Versionen
- Onboarding neuer Teammitglieder in Minuten statt Stunden
Docker Compose für Multi-Service-Setups
Moderne Webanwendungen bestehen selten aus einem einzigen Service. Docker Compose definiert alle Services in einer Datei und startet sie gemeinsam. Ein typisches Setup für eine Next.js-Anwendung:
- App-Container: Next.js-Anwendung
- Datenbank-Container: PostgreSQL oder MySQL
- Cache-Container: Redis für Session-Management
- Mail-Container: Mailhog für lokales E-Mail-Testing
Deployment und Produktion
In der Produktion ermöglicht Docker konsistente Deployments:
- Code wird in der CI/CD-Pipeline gebaut und als Docker Image verpackt
- Das Image wird in eine Container Registry (Docker Hub, GitHub Container Registry) gepusht
- Der Produktionsserver zieht das Image und startet den Container
- Rollbacks sind trivial: einfach das vorherige Image starten
Docker-Best-Practices für Web-Projekte
Kleine Images bauen
Je kleiner das Docker Image, desto schneller sind Builds, Transfers und Starts. Best Practices:
- Multi-Stage Builds: Build-Abhängigkeiten (TypeScript-Compiler, Build-Tools) nur in der Build-Stage, nicht im finalen Image
- Alpine-Basis-Images:
node:20-alpinestattnode:20spart hunderte MB - .dockerignore:
node_modules,.gitund Build-Artefakte vom Kontext ausschließen - Layer-Caching: Abhängigkeiten vor dem Code kopieren, damit npm install gecacht wird
Sicherheit
- Nie als Root-User im Container laufen
- Offizielle Basis-Images verwenden und regelmäßig aktualisieren
- Keine Secrets in Images einbacken, stattdessen Environment Variables oder Docker Secrets nutzen
- Images regelmäßig auf Vulnerabilities scannen (Docker Scout, Trivy)
Wann Docker nicht nötig ist
Nicht jedes Webprojekt braucht Docker:
- Vercel oder Netlify-Deployments: Diese Plattformen abstrahieren die gesamte Infrastruktur
- Einfache statische Websites: Ein Hosting auf einem CDN ist simpler
- Solo-Entwickler mit stabilem Setup: Der Overhead lohnt sich erst im Team
Docker ist am wertvollsten in Teams, bei komplexen Infrastrukturen und wenn konsistente, reproduzierbare Builds geschäftskritisch sind. Für eine Agentur wie PAKU Media ist Docker besonders bei Kundenprojekten relevant, die auf eigener Infrastruktur gehostet werden oder eine CI/CD-Pipeline mit automatisierten Tests erfordern.