Was ist Docker überhaupt?
Docker ist eine Plattform, die es Entwicklern ermöglicht, ihre Anwendungen in sogenannten Containern zu verpacken, auszuführen und zu verwalten. Diese Container sind leichtgewichtige, portable und isolierte Umgebungen, die alles enthalten, was eine Anwendung braucht: Code, Laufzeit, Systemtools, Bibliotheken – einfach alles.
Stell dir vor, du willst eine Anwendung starten, und du brauchst keine Sorgen mehr über die Umgebung, Betriebssystemversion oder Abhängigkeiten machen – Docker kümmert sich darum.
🔍 Warum Docker?
- Portabilität: „Es funktioniert auf meinem Rechner“ gehört der Vergangenheit an.
- Skalierbarkeit: Perfekt für Microservices und Cloud-Deployments.
- Effizienz: Container starten schneller als virtuelle Maschinen und verbrauchen weniger Ressourcen.
- Isolierung: Jeder Container läuft unabhängig – keine Konflikte zwischen Anwendungen.
📦 Die Grundlagen von Docker
1. Docker Engine
Die Docker Engine ist das Herzstück. Sie besteht aus:
- Docker Daemon (
dockerd
): Läuft im Hintergrund, verwaltet Images, Container, Netzwerke usw. - Docker CLI (
docker
): Die Kommandozeile, mit der du Docker steuerst. - REST API: Schnittstelle zwischen Tools und dem Docker Daemon.
2. Images vs. Container
- Image = Bauplan (z. B. für eine App oder ein Service)
- Container = laufende Instanz dieses Images
Ein Container ist also eine „lebendige“ Version eines Images – vergleichbar mit einer Instanz einer Klasse in der Programmierung.
3. Dockerfile
Ein Dockerfile ist eine Textdatei mit einer Reihe von Anweisungen, wie ein Image gebaut werden soll. Beispiel:
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "index.js"]
Mit docker build
erzeugt man daraus ein Image.
🧱 Schichten in Docker: Wie funktionieren sie?
Docker nutzt ein Schichtensystem (Layering), das auf dem Copy-on-Write-Prinzip basiert. Jede Anweisung im Dockerfile erzeugt eine neue Schicht im finalen Image.
🔹 Was ist eine Schicht?
Eine Schicht (Layer) ist eine nur-lesbare Änderung am Dateisystem des Containers. Sie wird nur einmal gespeichert und kann von mehreren Containern oder Images wiederverwendet werden.
📚 Beispiel mit Layern
FROM python:3.11-slim # Layer 1: Basisimage
COPY requirements.txt . # Layer 2
RUN pip install -r requirements.txt # Layer 3
COPY . . # Layer 4
CMD ["python", "main.py"] # Layer 5
- Docker prüft bei jedem Build, ob sich eine Schicht geändert hat.
- Unveränderte Schichten werden aus dem Cache wiederverwendet → schnellerer Build!
🔍 Layer-Typen im Detail:
Layer-Typ | Beschreibung |
---|---|
Base Layer | Kommt vom FROM -Befehl, z. B. ein OS oder eine Runtime |
Intermediate | Entsteht durch RUN , COPY , ADD etc. |
Final Layer | Enthält den Container-Startbefehl (z. B. CMD ) |
🧠 Vorteile des Layer-Modells
- Effiziente Builds: Nur veränderte Schichten werden neu gebaut.
- Kleinere Images: Gemeinsame Layer müssen nicht mehrfach gespeichert werden.
- Schnelleres Deployment: Wiederverwendung von Layern spart Bandbreite und Zeit.
🛠️ Best Practices beim Arbeiten mit Layers
- Minimiere die Anzahl der Layer: Fasse Befehle wie
RUN
zusammen. - Wichtige Dateien zuerst kopieren: Damit sich der Cache möglichst oft verwenden lässt.
- Nutze
.dockerignore
: Vermeide unnötige Dateien im Build-Kontext. - Vermeide
latest
-Tag inFROM
: Nutze feste Versionen für reproduzierbare Builds.
🧪 Bonus: Container vs. Virtuelle Maschine
Eigenschaft | Container | Virtuelle Maschine |
---|---|---|
Startzeit | Sekunden | Minuten |
Größe | Megabytes | Gigabytes |
Ressourcenbedarf | Gering | Hoch |
Isolierung | Prozessbasiert | Hardwarebasiert |
Portabilität | Hoch | Mittel |
📌 Fazit
Docker revolutioniert die Art und Weise, wie wir Software entwickeln, testen und bereitstellen. Besonders das Konzept der Layer ermöglicht eine effiziente, skalierbare und nachvollziehbare Containerisierung. Wer Docker versteht, hat einen gewaltigen Vorteil – nicht nur in der Cloud-Welt, sondern überall dort, wo moderne Software entsteht.
Wenn du willst, kann ich dir auch ein praktisches Beispielprojekt inklusive Dockerfile und docker-compose.yml
mitgeben. Sag einfach Bescheid!