Einführung in Docker: Grundlagen und Schichten einfach erklärt

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-TypBeschreibung
Base LayerKommt vom FROM-Befehl, z. B. ein OS oder eine Runtime
IntermediateEntsteht durch RUN, COPY, ADD etc.
Final LayerEnthä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

  1. Minimiere die Anzahl der Layer: Fasse Befehle wie RUN zusammen.
  2. Wichtige Dateien zuerst kopieren: Damit sich der Cache möglichst oft verwenden lässt.
  3. Nutze .dockerignore: Vermeide unnötige Dateien im Build-Kontext.
  4. Vermeide latest-Tag in FROM: Nutze feste Versionen für reproduzierbare Builds.

🧪 Bonus: Container vs. Virtuelle Maschine

EigenschaftContainerVirtuelle Maschine
StartzeitSekundenMinuten
GrößeMegabytesGigabytes
RessourcenbedarfGeringHoch
IsolierungProzessbasiertHardwarebasiert
PortabilitätHochMittel

📌 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!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert