Container & Docker#
Container sind eine leichtgewichtige Virtualisierungsmethode, bei der Anwendungen mit allen ihren Abhängigkeiten in isolierten Umgebungen auf einem gemeinsamen Betriebssystem-Kernel laufen.
1. Grundprinzip#
┌──────────────────────────────────────────┐
│ Container A │ Container B │ Container C │
│ App + Libs │ App + Libs │ App + Libs │
├──────────────────────────────────────────┤
│ Container-Runtime (Docker) │
├──────────────────────────────────────────┤
│ Host-Betriebssystem │
├──────────────────────────────────────────┤
│ Hardware │
└──────────────────────────────────────────┘Container teilen sich den Host-OS-Kernel, aber sind voneinander isoliert. Sie enthalten keine eigenes Betriebssystem (nur Bibliotheken + Anwendung).
2. Wichtige Begriffe#
| Begriff | Bedeutung |
|---|---|
| Image | Unveränderliche Vorlage für einen Container (wie eine ISO-Datei) |
| Container | Laufende Instanz eines Images |
| Dockerfile | Textdatei mit Bauanleitung für ein Image |
| Registry | Zentrales Repository für Images (z.B. Docker Hub) |
| Volume | Persistenter Speicher für Containerdaten |
| Port-Mapping | Weiterleitung von Host-Port an Container-Port |
| Namespace | Linux-Kernel-Feature für Isolation (Prozesse, Netz, Dateisystem) |
| cgroup | Ressourcenbegrenzung (CPU, RAM) für Container |
3. Docker — wichtigste Befehle (Überblick)#
| Befehl | Beschreibung |
|---|---|
docker pull nginx | Image aus Registry herunterladen |
docker run nginx | Container aus Image starten |
docker ps | Laufende Container anzeigen |
docker ps -a | Alle Container (auch gestoppte) |
docker stop <ID> | Container stoppen |
docker rm <ID> | Container löschen |
docker images | Alle lokalen Images |
docker rmi <ID> | Image löschen |
docker build -t name . | Image aus Dockerfile bauen |
4. Container vs. Virtuelle Maschine (VM)#
| Merkmal | Container | VM (Hypervisor) |
|---|---|---|
| Gast-OS | Nein (teilt Host-Kernel) | Ja (eigenes OS) |
| Startzeit | Sekunden | Minuten |
| Größe | Megabytes | Gigabytes |
| Ressourcenverbrauch | Sehr gering | Hoch |
| Isolation | Prozess-Isolation | Vollständige OS-Isolation |
| Sicherheit | Schwächer (shared kernel) | Stärker |
| Einsatz | Microservices, CI/CD | Vollständige Systemvirt. |
5. Microservices & Container#
Container sind ideal für Microservice-Architekturen: Jede Anwendungsfunktion läuft als eigener Container.
flowchart LR
subgraph Monolith
M[Gesamte Anwendung\nin einem Prozess]
end
subgraph Microservices mit Containern
A[Container:\nAuthentifizierung]
B[Container:\nDatenbank]
C[Container:\nWebserver]
D[Container:\nAPI-Gateway]
endVorteile:
- Einzelne Services können unabhängig aktualisiert werden
- Skalierung einzelner Komponenten möglich
- Fehler in einem Container beeinflussen andere nicht
6. Container-Orchestrierung#
Bei vielen Containern wird ein Orchestrierungssystem benötigt:
| Tool | Beschreibung |
|---|---|
| Docker Compose | Mehrere Container mit einer Konfigurationsdatei (yaml) starten |
| Kubernetes (K8s) | Verwaltung, Skalierung und Hochverfügbarkeit vieler Container |
| Docker Swarm | Einfachere Alternative zu Kubernetes von Docker |
7. Vor- und Nachteile von Containern#
| Vorteile | Nachteile |
|---|---|
| Schnell gestartet und gestoppt | Schwächere Isolation als VMs |
| Ressourceneffizient | Shared Kernel = Sicherheitsrisiko |
| Portabel: läuft überall gleich | Stateful Anwendungen komplexer |
| Einfache Skalierung | Lernkurve für Orchestrierung |
| DevOps & CI/CD-freundlich | Persistenz muss separat gelöst werden |
Wichtige Hinweise für die Prüfung#
- Container = kein eigenes OS, teilen Host-Kernel
- VM = eigenes Gast-OS, stärkere Isolation
- Image = Vorlage (unveränderlich), Container = laufende Instanz
- Docker ist die bekannteste Container-Laufzeitumgebung
- Kubernetes = Orchestrierung vieler Container im Produktivbetrieb
Siehe auch#
- hypervisor — Vergleich: Hypervisor-VMs vs. Container
- cloud — Container als Baustein moderner Cloud-Architekturen
- [[../06_it-sicherheit/backup-strategien]] — Datensicherung bei containerisierten Anwendungen