Zum Inhalt springen
Zum Hauptinhalt springen
DevOps

Docker / Container

Technologie zur Paketierung von Anwendungen mit allen Abhängigkeiten. Container ermöglichen konsistente Deployments und sind die Basis für Kubernetes.

Docker hat die Art, wie Software deployed wird, revolutioniert. Statt Anwendungen manuell auf Servern zu installieren und mit Abhängigkeitskonflikten zu kämpfen, verpackt Docker alles Nötige in einen Container: Code, Runtime, Bibliotheken und Konfiguration. Das Ergebnis: Die Anwendung läuft überall gleich – auf dem Entwickler-Laptop, im Testserver und in der Produktion.

Was ist Docker / Container?

Docker ist eine Container-Plattform, die Anwendungen mit allen Abhängigkeiten in standardisierte, isolierte Einheiten (Container) verpackt. Ein Container enthält alles, was die Anwendung braucht: Code, Runtime (z.B. Node.js), Bibliotheken und Konfiguration. Im Unterschied zu virtuellen Maschinen (VMs) teilen Container den Host-Kernel und sind dadurch leichtgewichtiger (Megabytes statt Gigabytes) und starten in Sekunden statt Minuten. Ein Dockerfile definiert den Container-Build als Code, ein Docker Image ist das unveränderliche Ergebnis, ein Docker Container ist eine laufende Instanz eines Images. Docker Compose orchestriert mehrere Container (z.B. App + Datenbank + Redis) für lokale Entwicklung.

Wie funktioniert Docker / Container?

Docker nutzt Linux-Kernel-Features (Namespaces für Isolation, cgroups für Ressourcenlimits, Union Filesystems für Images). Ein Dockerfile beschreibt die Build-Schritte: Basis-Image wählen (FROM node:20), Abhängigkeiten installieren (RUN npm install), Code kopieren (COPY . .) und Startbefehl definieren (CMD node server.js). Docker baut daraus ein Image in Layern – unveränderte Layer werden gecacht für schnelle Rebuilds. Container Registry (Docker Hub, GitHub Container Registry) speichern und verteilen Images. In Produktion orchestriert Kubernetes Hunderte von Containern mit Auto-Scaling, Rolling Updates und Service Discovery.

Praxisbeispiele

1

Lokale Entwicklungsumgebung: docker compose up startet die komplette Anwendung (Frontend, Backend, PostgreSQL, Redis) mit einem Befehl – jeder Entwickler hat die gleiche Umgebung.

2

Multi-Stage Build: Ein Dockerfile baut die Anwendung in einem Build-Container und kopiert nur das kompilierte Ergebnis in einen minimalen Production-Container (Alpine Linux) – kleines Image, sicher.

3

Microservices-Deployment: Jeder Microservice hat sein eigenes Docker Image und wird unabhängig deployed, skaliert und aktualisiert.

4

CI/CD-Pipeline: Tests laufen in Docker-Containern in der CI/CD-Pipeline – identische Umgebung wie Produktion, reproduzierbare Ergebnisse.

Typische Anwendungsfälle

Lokale Entwicklung: Einheitliche Entwicklungsumgebungen ohne It works on my machine-Probleme

Microservices: Jeder Service als eigenständiger Container mit eigenem Lifecycle

CI/CD: Reproduzierbare Build- und Test-Umgebungen in der Pipeline

Deployment: Konsistente Deployments von Entwicklung über Staging zu Produktion

Legacy-Containerisierung: Bestehende Anwendungen in Container verpacken für Cloud-Migration

Vorteile und Nachteile

Vorteile

  • Portabilität: Container laufen identisch auf jedem System – lokal, Cloud, On-Premise
  • Isolation: Anwendungen und Abhängigkeiten sind isoliert – keine Konflikte mehr
  • Leichtgewichtig: Container starten in Sekunden und benötigen weniger Ressourcen als VMs
  • Reproduzierbarkeit: Dockerfile als Code definiert die exakte Umgebung, versioniert in Git
  • Ökosystem: Riesige Library öffentlicher Images auf Docker Hub (Datenbanken, Tools, Sprachen)

Nachteile

  • Lernkurve: Dockerfile-Optimierung, Networking und Volumes erfordern Docker-Know-how
  • Sicherheit: Unsichere Base-Images oder Root-Benutzer in Containern sind häufige Fehler
  • Overhead bei kleinen Projekten: Für eine einfache statische Website ist Docker Overkill
  • Persistente Daten: Container sind kurzlebig – Datenbanken und Uploads erfordern Volumes
  • Image-Größe: Ohne Optimierung werden Docker Images schnell unnötig groß

Häufig gestellte Fragen zu Docker / Container

Was ist der Unterschied zwischen Docker und einer VM?

Virtuelle Maschinen virtualisieren die gesamte Hardware und laufen mit eigenem Betriebssystem (Gigabytes, Minuten zum Starten). Container teilen den Host-Kernel und isolieren nur die Anwendung (Megabytes, Sekunden zum Starten). VMs bieten stärkere Isolation (eigener Kernel), Container bieten bessere Ressourceneffizienz und Geschwindigkeit. In der Praxis laufen Container oft innerhalb von VMs (z.B. EC2-Instanz mit Docker).

Brauche ich Docker für mein Projekt?

Docker lohnt sich, wenn: das Team aus mehreren Entwicklern besteht (konsistente Umgebungen), mehrere Services laufen (Backend, Datenbank, Cache), CI/CD-Pipelines verwendet werden, oder Cloud-Deployment geplant ist. Für Solo-Entwickler mit einem einfachen Projekt kann Docker Overkill sein – ein einfaches npm start reicht oft.

Docker oder Kubernetes?

Docker ist die Container-Runtime – es erstellt und führt einzelne Container aus. Kubernetes ist die Orchestrierung – es verwaltet viele Container über viele Server: Skalierung, Selbstheilung, Load Balancing, Rolling Updates. Docker ist für Entwicklung und kleine Deployments ausreichend. Kubernetes wird ab ca. 5-10+ Services und dem Bedarf nach Auto-Scaling und Hochverfügbarkeit relevant. Alternativen zu Kubernetes: Docker Swarm (einfacher), AWS ECS, Google Cloud Run.

Verwandte Begriffe

Docker / Container in Ihrem Projekt einsetzen?

Wir beraten Sie gerne zu Docker / Container und finden die optimale Lösung für Ihre Anforderungen. Profitieren Sie von unserer Erfahrung aus über 200 Projekten.

Nächster Schritt

Gemeinsam finden wir den besten Ansatz für Ihr Vorhaben.

Ob und wie wir helfen können, klären wir unverbindlich in einem kurzen Gespräch.

30 Min. Strategiegespräch – 100% kostenlos & unverbindlich

Was ist Docker? Container-Technologie erklärt