
Was ist Docker und wie funktioniert es?
docker-Client sendet Befehle über eine REST-API an den dockerd-Daemon, der
erstellt Images und führt daraus Container aus.Warum es existiert. Mit Docker können Sie eine Anwendung mit all ihren Abhängigkeiten (Bibliotheken, Konfiguration, Laufzeit) in ein einziges Artefakt – ein Image – packen und es identisch auf einem Entwickler-Laptop, in CI und in der Produktion ausführen. Dies löst das klassische Problem „Funktioniert auf meinem Computer“.
Container vs. virtuelle Maschinen. Eine VM virtualisiert Hardware und liefert ein komplettes Gastbetriebssystem mit seinem eigenen Kernel. Ein Container ist ein isolierter Prozess, der den Kernel des Hosts verwendet. Dadurch sind Container leichter, starten in Sekundenbruchteilen und verbrauchen weniger Ressourcen. Aber ein Container ist keine leichte VM: Er ist an den Host-Kernel gebunden und seine Isolationsgrenze ist schwächer als die einer VM. Eine VM verfügt über eine durch Hardware erzwungene Isolation, wohingegen eine Schwachstelle im gemeinsam genutzten Kernel potenziell aus einem Container umgangen werden kann – das ist der Kompromiss zwischen Geschwindigkeit und Dichte. Der Host muss zum Containertyp passen: Linux-Container benötigen einen Linux-Kernel, Windows-Container benötigen einen Windows-Kernel. Unter macOS und Windows führt Docker Desktop transparent eine kleine Linux-VM aus (z. B. über WSL2), sodass dortige Linux-Container den Kernel dieser VM und nicht den Kernel Ihres Betriebssystems gemeinsam nutzen.
Architektur (Client-Server). Laut Docker-Dokumentation:
- Der
docker-Client ist die primäre Art und Weise, wie Benutzer mit Docker interagieren. Befehle wiedocker runwerden an den Daemon gesendet. - Der
dockerd-Daemon „nimmt die schwere Arbeit“ des Erstellens, Ausführens und Verteilens von Containern wahr und verwaltet Objekte wie Bilder, Container, Netzwerke und Volumes. - Der Client kommuniziert mit dem Daemon über eine REST-API über einen UNIX-Socket oder eine Netzwerkschnittstelle, sodass sie auf verschiedenen Maschinen ausgeführt werden können.
- Eine Registrierung speichert Bilder; Der standardmäßige öffentliche ist Docker Hub.
Bilder und Container. Eine praktische Analogie: Ein Bild ist wie eine Klasse (oder ein Programm auf der Festplatte), und ein Container ist eine Instanz davon (ein laufender Prozess); Sie können viele Container von einem Image aus starten.
- Ein Bild ist eine schreibgeschützte Vorlage mit Anweisungen zum Erstellen eines aus Ebenen erstellten Containers. Es wird durch eine Docker-Datei definiert; Wenn Sie es ändern, werden nur die geänderten Ebenen neu erstellt.
- Ein Container ist eine ausführbare Instanz eines Images. Zusätzlich zu den schreibgeschützten Ebenen des Bildes wird eine dünne beschreibbare Ebene hinzugefügt (Kopieren beim Schreiben); Alles, was dort geschrieben wird, geht verloren, wenn der Container entfernt wird – und genau aus diesem Grund benötigen persistente Daten Volumes.
Wie Isolation funktioniert (unter der Haube). Dockerd ruft den Kernel nicht direkt auf – es delegiert die Container-Lebenszyklusverwaltung an containerd, der eine OCI-Laufzeit aufruft; In Docker ist der Standardwert runc, aber die Laufzeit ist austauschbar (crun, gVisor, Kata usw.). Die eigentliche Isolation ergibt sich aus den Linux-Kernel-Funktionen:
- Namespaces isolieren Ressourcen (laut Man7-Seite gibt es 8 Typen: PID, Netzwerk, Mount, UTS, IPC, Benutzer, cgroup, Zeit). Ein Prozess „sieht“ nur seine eigenen PIDs, seinen eigenen Netzwerkstapel usw.
- cgroups (Kontrollgruppen) begrenzen und berücksichtigen die Ressourcennutzung (CPU, Speicher, E/A).
Häufige Folgemaßnahmen. Bildebenen werden zwischengespeichert; docker compose führt Multi-Container-Apps aus; Daten bleiben über Volumes bestehen (ein Container ist standardmäßig kurzlebig); und OCI standardisiert das Bildformat (image-spec), die Laufzeit (runtime-spec) und das Registrierungsverteilungsprotokoll (distribution-spec) – diese drei Spezifikationen halten das Ökosystem interoperabel.
