Docker

0 46

Virtualisierung verstehen

Bevor wir Docker und virtuelle Maschinen vergleichen, müssen wir verstehen, was Virtualisierung bedeutet und warum sie wichtig ist.

Traditionelles Setup: Früher lief auf einem physischen Server nur ein Betriebssystem mit allen Anwendungen. Das war ineffizient und unflexibel.

Virtualisierung: Ermöglicht das Ausführen mehrerer isolierter Systeme auf derselben Hardware. Zwei Hauptansätze haben sich durchgesetzt:

  1. Virtuelle Maschinen (traditionelle Virtualisierung)
  2. Container (moderne Virtualisierung mit Docker)

Was sind Virtuelle Maschinen?

Eine virtuelle Maschine (VM) ist ein vollständiges Computer-System, das auf einem physischen Host läuft. Jede VM emuliert komplette Hardware und benötigt ein eigenes Betriebssystem.

Architektur einer VM

┌─────────────────────────────────────┐
│   App A    │    App B    │  App C   │
├────────────┼─────────────┼──────────┤
│  Binaries  │  Binaries   │ Binaries │
│  Libraries │  Libraries  │ Libraries│
├────────────┼─────────────┼──────────┤
│   Guest OS │   Guest OS  │ Guest OS │
│  (Windows) │   (Linux)   │ (Ubuntu) │
├────────────┴─────────────┴──────────┤
│         Hypervisor (VMware/VirtualBox)│
├──────────────────────────────────────┤
│         Host Operating System        │
├──────────────────────────────────────┤
│         Physical Infrastructure      │
└──────────────────────────────────────┘

Jede VM enthält:

  • Vollständiges Betriebssystem (Windows, Linux, etc.)
  • Eigener Kernel
  • Eigene Systemdienste
  • Virtuelle Hardware (CPU, RAM, Festplatte)

Was sind Docker-Container?

Container teilen sich den Kernel des Host-Betriebssystems und enthalten nur die Anwendung mit ihren Abhängigkeiten.

Architektur von Docker

┌─────────────────────────────────────┐
│   App A    │    App B    │  App C   │
├────────────┼─────────────┼──────────┤
│  Binaries  │  Binaries   │ Binaries │
│  Libraries │  Libraries  │ Libraries│
├────────────┴─────────────┴──────────┤
│         Docker Engine                │
├──────────────────────────────────────┤
│      Host Operating System (Linux)   │
├──────────────────────────────────────┤
│         Physical Infrastructure      │
└──────────────────────────────────────┘

Ein Container enthält:

  • Nur die Anwendung
  • Notwendige Bibliotheken
  • Minimale Runtime-Umgebung
  • KEIN eigenes Betriebssystem

Der Hauptunterschied

Virtuelle Maschinen

Vollständige Isolation: Jede VM ist ein komplett eigenständiges System mit eigenem Kernel und Betriebssystem.

Größe: Typisch 5-20 GB pro VM (Windows VM kann 40+ GB sein)

Startzeit: 2-5 Minuten

Ressourcenverbrauch: Hoch (jede VM reserviert RAM und CPU)

Docker-Container

Prozess-Level-Isolation: Container teilen sich den Host-Kernel, sind aber voneinander isoliert.

Größe: Typisch 50-500 MB pro Container

Startzeit: 2-5 Sekunden

Ressourcenverbrauch: Minimal (nur die Anwendung verbraucht Ressourcen)

Detaillierter Vergleich

1. Leistung

Virtuelle Maschinen:

❌ Overhead durch vollständiges Betriebssystem
❌ Emulation von Hardware kostet Performance
❌ Jede VM benötigt eigene Ressourcen

Docker-Container:

✅ Minimaler Overhead
✅ Native Performance (fast wie direktes Ausführen)
✅ Effizienter Ressourcen-Sharing

Praktisches Beispiel:

Auf einem Server mit 32 GB RAM:

  • VMs: 4-6 VMs möglich (jede braucht 4-8 GB)
  • Container: 50-100 Container möglich (jeder braucht 50-500 MB)

2. Startzeit

Virtuelle Maschinen:

# VM starten
$ time vagrant up
real    3m 45s

Docker-Container:

# Container starten
$ time docker run -d nginx
real    0m 2s

Warum der Unterschied?

VMs müssen:

  1. BIOS initialisieren
  2. Betriebssystem booten
  3. Systemdienste starten
  4. Anwendung starten

Container müssen:

  1. Anwendung starten ✓

3. Speicherplatz

Beispiel: Nginx-Webserver

Virtuelle Maschine (Ubuntu):

Ubuntu VM:           10 GB
Nginx Installation:  50 MB
─────────────────────────
Gesamt:              ~10 GB

Docker-Container:

Nginx Container:     24 MB
─────────────────────────
Gesamt:              24 MB

Faktor: 400x kleiner!

4. Skalierbarkeit

Szenario: E-Commerce-Shop bei plötzlich hohem Traffic

Mit VMs:

# Neue VM hochfahren
$ create-new-vm app-server-3
# Warten: 5 Minuten
# Konfigurieren: 10-30 Minuten
# Deployment: 10 Minuten
# Gesamt: 25-45 Minuten

Mit Docker:

# Neuen Container starten
$ docker run -d myapp:latest
# Gesamt: 5 Sekunden

5. Portabilität

Virtuelle Maschinen:

❌ VM-Format ist Hypervisor-spezifisch
   - VMware (VMDK)
   - VirtualBox (OVA/OVF)
   - Hyper-V (VHD/VHDX)
❌ Migration zwischen Hypervisoren kompliziert

Docker-Container:

✅ Läuft überall wo Docker installiert ist
✅ Identisch auf Linux, Windows, macOS
✅ Cloud-Provider-unabhängig

6. Isolation und Sicherheit

Virtuelle Maschinen:

✅ Stärkere Isolation (eigener Kernel)
✅ Angriff auf VM 1 betrifft VM 2 nicht
✅ Ideal für Multi-Tenant-Umgebungen

Docker-Container:

⚠️ Teilen sich Host-Kernel
⚠️ Schwächere Isolation (aber ausreichend)
✅ Moderne Sicherheits-Features (Namespaces, cgroups)

Sicherheits-Tipp: Für höchste Sicherheitsanforderungen kombinieren Sie beide: Docker-Container IN VMs.

Wann sollten Sie was verwenden?

Verwenden Sie Virtuelle Maschinen für:

Verschiedene Betriebssysteme: Windows und Linux parallel
Legacy-Anwendungen: Alte Software, die nicht containerisiert werden kann
Starke Isolation: Banking, Government, Multi-Tenant
Vollständige Systemkontrolle: Kernel-Anpassungen nötig
Desktop-Virtualisierung: Virtuelle Arbeitsplätze

Beispiele:

  • Windows-Anwendung auf Linux-Server testen
  • Isolierte Test-Umgebung für unsichere Software
  • Virtuelle Desktop-Infrastruktur (VDI)

Verwenden Sie Docker-Container für:

Microservices: Moderne Architekturen
Web-Anwendungen: PHP, Node.js, Python, etc.
CI/CD-Pipelines: Automatisierte Tests und Deployments
Entwicklungsumgebungen: Schnelles Setup
Cloud-Native Apps: Kubernetes, Docker Swarm
Skalierbare Anwendungen: Auto-Scaling

Beispiele:

  • Laravel/Shopware-Entwicklung
  • Node.js REST-API
  • WordPress-Hosting
  • Elasticsearch-Cluster

Kombinierter Ansatz: Das Beste aus beiden Welten

Viele Unternehmen kombinieren beide Technologien:

┌──────────────────────────────────────┐
│      Virtual Machine 1 (Security)    │
│  ┌────────┐  ┌────────┐  ┌────────┐ │
│  │Docker 1│  │Docker 2│  │Docker 3│ │
│  │Frontend│  │ API    │  │ DB     │ │
│  └────────┘  └────────┘  └────────┘ │
└──────────────────────────────────────┘

┌──────────────────────────────────────┐
│      Virtual Machine 2 (Testing)     │
│  ┌────────┐  ┌────────┐             │
│  │Docker 4│  │Docker 5│             │
│  │ Test 1 │  │ Test 2 │             │
│  └────────┘  └────────┘             │
└──────────────────────────────────────┘

Vorteile:

  • Starke Isolation zwischen Umgebungen (VMs)
  • Schnelle Skalierung innerhalb der Umgebungen (Container)
  • Beste Ressourcen-Ausnutzung

Kosten-Vergleich

Szenario: E-Commerce mit 10 Services

Mit VMs:

10 VMs à 4 GB RAM    = 40 GB RAM
10 VMs à 2 vCPUs     = 20 vCPUs
Speicher              = 100 GB

Cloud-Kosten/Monat:   ~800-1200 EUR

Mit Docker:

10 Container à 512 MB = 5 GB RAM
10 Container teilen sich CPUs = 4 vCPUs ausreichend
Speicher              = 10 GB

Cloud-Kosten/Monat:   ~150-250 EUR

Ersparnis: 70-80% bei den Infrastrukturkosten!

Performance-Benchmarks

Web-Server-Anfragen (Nginx)

Bare Metal:          10.000 req/s  (100% Baseline)
Docker-Container:     9.800 req/s  (98% Performance)
Virtuelle Maschine:   8.500 req/s  (85% Performance)

Datenbank-Queries (MySQL)

Bare Metal:          5.000 queries/s  (100% Baseline)
Docker-Container:    4.900 queries/s  (98% Performance)
Virtuelle Maschine:  4.200 queries/s  (84% Performance)

Ergebnis: Docker hat fast native Performance!

Mythen und Missverständnisse

Mythos 1: „VMs sind sicherer als Container“

Wahrheit: Beide können sicher sein, wenn richtig konfiguriert. Container haben moderne Sicherheits-Features wie Namespaces, Control Groups und SELinux/AppArmor-Support.

Mythos 2: „Container sind nur für Linux“

Wahrheit: Docker läuft auf Windows, macOS und Linux. Windows-Container sind ebenfalls möglich.

Mythos 3: „VMs sind überholt“

Wahrheit: VMs haben weiterhin ihre Berechtigung für bestimmte Use Cases, besonders bei strenger Isolation.

Zusammenfassung

KriteriumVirtuelle MaschinenDocker-Container
GrößeGBsMBs
StartzeitMinutenSekunden
PerformanceOverheadNative
IsolationKomplettProzess-Level
PortabilitätEingeschränktExzellent
RessourcenHochNiedrig
Use CaseLegacy, Multi-OSModern, Cloud

Die Wahl hängt von Ihren Anforderungen ab:

  • Brauchen Sie maximale Isolation? → VMs
  • Wollen Sie schnell skalieren? → Docker
  • Haben Sie Legacy-Software? → VMs
  • Bauen Sie moderne Apps? → Docker
  • Kombiniert? → Oft die beste Lösung!

Nächste Schritte

Jetzt verstehen Sie den Unterschied zwischen VMs und Containern. Im nächsten Tutorial installieren wir Docker auf Ihrem System.

Author: Andreas Lang

Sphinx-Flashdesign.de

Andreas Lang konzentriert sich seit zwei Jahrzehnten auf die Webentwicklung und Webdesign mit dem Schwerpunkt PHP, Laravel und Javascript und betreut seine Kunden mit Herz und Seele in allen Bereichen von Entwicklung, Design, Suchmaschinenoptimierung, IT-Recht, IT-Sicherheit etc.