So funktioniert Docker — bauen, ausliefern, ausführen
So funktioniert Docker, interaktiv dargestellt: vom Dockerfile zum Image, von der Registry zum Container, und die Namespaces und cgroups, die einen Prozess isolieren.
Docker verpackt eine Anwendung und alles, was sie braucht, in ein Image und führt sie dann als Container aus — als isolierten Prozess, der sich auf jeder Maschine mit einer Docker Engine identisch verhält.
So funktioniert Docker — bauen, ausliefern, ausführen
Die interaktive FlowJam-Zeichenfläche zu dieser Erklärung — jede Bahn, jede Zeile und jeder Pfeil oben gehört zu einem echten QueryChart-Diagramm, das Sie öffnen und bearbeiten können.
So lesen Sie diese Darstellung
- Lesen Sie die drei Spalten von links nach rechts: Bauen, Ausliefern, Ausführen.
- Das unterste Band, „Host-Betriebssystem“, ist das Fundament: Der Container am Ende des Ablaufs läuft AUF ihm und teilt seinen Kernel.
- Das Image ist das Artefakt, das alle anderen hin- und herbewegen — von der Docker Engine in die Registry und zurück in die Laufzeitumgebung.
Das Image bauen
„Entwickler beschreibt die App in einem Dockerfile“ ist ein Rezept, kein Ergebnis: ein Basis-Image, die zu installierenden Abhängigkeiten, die zu kopierenden Dateien und der auszuführende Befehl. „docker build verpackt die App und ihre Abhängigkeiten“ führt das Rezept aus, und „Der Build erzeugt ein Image — eine schreibgeschützte Momentaufnahme“ ist das Ergebnis — ein unveränderliches Artefakt in einem geschichteten Dateisystem. Auf die Reproduzierbarkeit kommt es an: Dasselbe Dockerfile erzeugt auf jeder Maschine dasselbe Image.
Das Artefakt ausliefern
„Image wird in eine Registry geladen oder daraus geholt“ ist der Akt „Ausliefern“. Die Registry ist das Verteilnetz für Images — eine private Registry für Ihr Team, eine öffentliche für Basis-Images. Das Image ändert sich beim Ausliefern nie, und genau das macht das Deployment deterministisch: Was Sie getestet haben, ist exakt das, was Sie ausführen.
Den Container ausführen
„docker run startet einen Container aus dem Image“ führt von der Docker Engine in die Bahnengruppe „Container-Laufzeitumgebung“. „Container wird durch Namespaces und cgroups isoliert“ ist der Isolationsmechanismus — Namespaces geben dem Prozess eine eigene Sicht auf Dateisystem, Netzwerk und Prozesstabelle, cgroups deckeln seine CPU und seinen Arbeitsspeicher. „Container teilt den Kernel des Hosts, hat aber ein eigenes Dateisystem“ steht im Band „Host-Betriebssystem“, um den Gegensatz zur virtuellen Maschine deutlich zu machen, und „Der App-Prozess läuft überall gleich“ ist der Ertrag, der den ganzen Aufbau rechtfertigt.
Wichtige Zusammenhänge und Erkenntnisse
- Ein Image ist eine schreibgeschützte Momentaufnahme; ein Container ist eine laufende Instanz davon.
- Container teilen den Kernel des Hosts und täuschen Isolation mit Namespaces vor — deshalb starten sie in Sekunden, wo virtuelle Maschinen Minuten brauchen.
- cgroups begrenzen, was ein Container verbrauchen kann, damit ein lauter Nachbar den Host nicht aushungert.
- Die Unveränderlichkeit des Images ist es, die „läuft überall gleich“ wahr macht.
- Docker liefert die Verpackung und die Laufzeitumgebung; Orchestrierer wie Kubernetes verwalten viele Container über mehrere Hosts hinweg.
Wann Sie diese Darstellung nutzen
- Einem Entwickler erklären, warum Docker funktioniert und worin sich ein Container von einer virtuellen Maschine unterscheidet.
- Ein Team an das Modell aus Bauen, Ausliefern und Ausführen heranführen, bevor es sein erstes Dockerfile schreibt.
- Ein Gespräch über auseinanderdriftende Umgebungen fundieren — warum „works on my machine“ nicht mehr greift.
So funktioniert es
Vermerken Sie Ihre Dockerfile-Schritte
Listen Sie am Dockerfile-Kasten die echten Schichten Ihres Builds auf — Basis-Image, Installation der Abhängigkeiten, Kopieren des Quellcodes, Startbefehl —, damit das Rezept konkret wird.
Benennen Sie Ihre Registrys
Benennen Sie den Registry-Schritt nach Ihren tatsächlichen Registrys (eine private ECR, ein öffentliches Image) und vermerken Sie, welche Images Sie hochladen und welche Sie holen.
Ergänzen Sie die Kästen für Netzwerk und Volume
Erweitern Sie die Spalte zur Laufzeitumgebung um die Art, wie Ihre Container miteinander sprechen — ein Bridge-Netzwerk —, und darum, wo der Zustand liegt — ein Volume —, denn das sind die beiden Teile, die Einsteiger am häufigsten übersehen.
Verknüpfen Sie mit der Orchestrierung
Wenn Sie Kubernetes einsetzen, ergänzen Sie eine Notiz, die vom laufenden Container auf die Kubernetes-Darstellung verweist und darauf, was das kubelet daran ändert, wo der Container läuft.
Häufig gestellte Fragen
Worin unterscheiden sich ein Container und eine virtuelle Maschine?
Eine virtuelle Maschine virtualisiert die Hardware: Sie bringt ein vollständiges Betriebssystem mit, und ein Hypervisor vermittelt alles, was sie schwer und langsam im Start macht. Ein Container virtualisiert das Betriebssystem: Er teilt den Kernel des Hosts und nutzt Namespaces für die Isolation und cgroups für Ressourcengrenzen. Deshalb starten Container in Sekunden und sind viel leichter — der Preis dafür ist, dass alle Container auf einem Host denselben Kernel teilen.
Was ist ein Image, und was ein Container?
Ein Image ist das statische Artefakt — eine schreibgeschützte Momentaufnahme der Anwendung und ihrer Abhängigkeiten, gebaut aus dem Dockerfile. Ein Container ist dieses Image in Bewegung: ein laufender Prozess mit einer beschreibbaren Schicht darüber. Sie bauen ein Image einmal und können Tausende Container daraus starten, jeden isoliert von den anderen.
Wie isoliert Docker Container?
Mit zwei Funktionen des Linux-Kernels. Namespaces geben jedem Container eine eigene Sicht auf das System — ein eigenes Dateisystem, einen eigenen Netzwerk-Stack, eine eigene Prozesstabelle und eigene Benutzer-IDs —, sodass er wie eine eigene Maschine wirkt. cgroups (control groups) begrenzen und messen Ressourcen: Sie deckeln, wie viel CPU, Arbeitsspeicher und I/O ein Container verbrauchen kann, damit ein Container seine Nachbarn nicht mitreißt.
Warum macht Docker Anwendungen portabel?
Weil das Image die Anwendung zusammen mit ihrer Laufzeitumgebung, ihren Bibliotheken und ihrer Konfiguration bündelt — alles außer dem Kernel. Überall, wo eine Docker Engine läuft, läuft das Image gleich, und so schrumpft der Abstand zwischen dem Laptop eines Entwicklers, einem CI-Runner und einem Server im Produktivbetrieb auf die Konfiguration, die absichtlich außerhalb des Images gehalten wird.
Diese Darstellung in QueryChart (FlowJam) bearbeiten
Öffnen Sie genau diese Docker-Zeichenfläche als eigenes Diagramm, benennen Sie die Bahnengruppen auf Ihren Stack um, und vermerken Sie Ihre Image-Pipeline.