↓Zum Hauptinhalt springen
Alemasone

Kubernetes vs. Docker: Unterschiede und Zusammenarbeit

Keine Alternativen: Einer baut Container, der andere koordiniert sie. Erfahre, was beide tun und wann du Kubernetes wirklich brauchst.

8 Min. Lesezeit Aktualisiert am
Container eines Containerschiffes aus der Vogelperspektive, ordentlich in farbigen Reihen angeordnet
Auf dieser Seite
Sich die Frage zu stellen, ob man Kubernetes oder Docker nutzen soll, ist ein bisschen so, als würde man sich fragen, ob man einen Lkw kaufen oder einen Hafen bauen soll. Docker erstellt und führt Container aus. Kubernetes koordiniert hunderte von Containern auf Dutzenden von Maschinen. Sie arbeiten auf zwei verschiedenen Ebenen und werden oft zusammen eingesetzt. Oder man nutzt nur Docker, weil viele Projekte das Problem, das Kubernetes löst, gar nicht haben.

Um den Unterschied zu verstehen, hilft ein Vergleich mit dem Güterverkehr, von dem diese Tools ihre Namen und Logos geliehen haben: Der Wal von Docker lädt die Container, das Steuerrad von Kubernetes (auf Griechisch bedeutet kubernetes genau „Steuermann“) führt sie.

Der Container und der Hafen #

Der Container ist eine Standardbox. Darin packst du die Anwendung, ihre Bibliotheken und die exakte Version der benötigten Programmiersprache. Von außen sieht es immer dieselbe Box mit denselben Anschlüssen aus: Wer sie bewegt, muss nicht wissen, was drin ist. So verschwindet das klassische „Auf meinem Rechner funktioniert es“.

Im Gegensatz zu einer virtuellen Maschine bringt ein Container kein ganzes Betriebssystem mit: Er nutzt den Kernel des Host-Systems. Deshalb startet er in einer Sekunde und wiegt nur wenige Megabyte statt Gigabytes. Im Gegenzug ist er weniger isoliert als eine VM, und ein Linux-Container benötigt einen Linux-Kernel.

Docker ist die Werkstatt, die die Box baut, und der Kran, der sie auf den Lkw lädt. Du schreibst die Anweisungen in einem Dockerfile, Docker erstellt ein Image und führt es mit der Docker Engine aus. Fertige Images findest du im Docker Hub, dem am häufigsten genutzten öffentlichen Register.

Schema, das virtuelle Maschinen mit vollständigem Betriebssystem und Container, die auf einem einzigen Kernel basieren, vergleicht
Der Container teilt sich den Kernel: Das ist es, was ihn leicht macht

Kubernetes ist der Hafen. Er baut keine Boxen und öffnet sie auch nicht: Er entscheidet, auf welches Schiff jede einzelne kommt, wie viele Kopien derselben Ladung man herumliegen lässt, was zu tun ist, wenn ein Schiff sinkt, und wie die ankommenden Lkw auf das richtige Dock verteilt werden. Wenn eine Box ins Meer fällt, lädt er sofort eine identische neue nach, ohne dass es jemand merkt.

In der Praxis hat ein Kubernetes-Cluster einen Control Plane, der die Entscheidungen trifft, und Nodes (die Maschinen), die die Arbeit erledigen. Die Container laufen in Pods, der kleinsten Einheit, die Kubernetes verwaltet: Meistens enthält ein Pod einen Container, manchmal zwei oder drei, die zusammengehören müssen.

Ein Hafen mit nur drei Containern ist ein Stellplatz mit drei Boxen: Das zu organisieren kostet mehr als das Problem, das es löst. Deshalb kommen viele Projekte mit reinem Docker bestens zurecht.

Schema eines Kubernetes-Clusters mit dem Control Plane und den Worker-Nodes, die Pods und Container hosten
Der Control Plane entscheidet, die Nodes führen aus

Was macht was #

DockerKubernetes
BereichEine MaschineViele Maschinen zusammen
AufgabeErstellen und Ausführen von ContainernVerteilen, Überwachen, Ersetzen
Problem, das es löst„Funktioniert überall auf die gleiche Weise“„Bleibt stabil und trägt die Last“
SchwierigkeitDas Wesentliche lernt man an einem NachmittagWochenlang, und man wird nie fertig
Wann man es brauchtBei fast allen ProjektenWenn die Skalierung es erfordert

Kubernetes rechtfertigt sich durch fünf Funktionen. Wenn du keine davon brauchst, brauchst du auch kein Kubernetes:

  • Automatischer Neustart von Dingen, die aufhören zu funktionieren (self-healing).
  • Skalierbarkeit: Erhöht oder verringert die Anzahl der Kopien je nach Last.
  • Lastverteilung (Load Balancing) zwischen den aktiven Kopien.
  • Rollout-Updates, die die Kopien nacheinander ohne Unterbrechung ersetzen, inklusive Rollback auf die vorherige Version, falls etwas schiefgeht.
  • Deklarative Konfiguration: Du schreibst in einer YAML-Datei den gewünschten Zustand vor und das System arbeitet daran, diesen zu halten, anstatt Befehle einzeln abzuarbeiten.

„Kubernetes hat Docker verlassen“: Was ist passiert #

Diese Nachricht taucht immer mal wieder auf, wird aber meistens falsch erzählt.

In der Version 1.24, die im Mai 2022 veröffentlicht wurde, hat Kubernetes das dockershim entfernt – das Teil, mit dem es den Docker Engine nutzen konnte, um Container auszuführen. Heute nutzt es leichtere Runtimes, die dem CRI-Standard entsprechen, wie containerd (was übrigens derselbe Motor ist, den Docker intern verwendet) und CRI-O.

Die Images sind davon nicht betroffen: Mit Docker erstellte Images folgen dem offenen OCI-Standard und laufen identisch auf Kubernetes. Für Entwickler hat sich nichts geändert: Du baust mit Docker und führst es wie bisher auf Kubernetes aus. Die Änderung betrifft nur diejenigen, die die Cluster administrieren.

Was man nutzen sollte, je nachdem, wo man steht #

Eine einzelne Anwendung auf einem Server. Nur Docker: ein Image, ein Befehl zum Starten und die Option --restart unless-stopped für einen automatischen Neustart. Hier noch einen Orchestrierer hinzuzufügen bedeutet, ein zweites System warten zu müssen, nur um eine einzige Sache zu verwalten.

Mehrere verbundene Dienste auf einer Maschine, zum Beispiel Anwendung, Datenbank und Cache. Hier brauchst du Docker Compose: Eine compose.yaml Datei beschreibt alle Dienste und wie sie miteinander kommunizieren, und docker compose up startet sie gemeinsam. Es deckt die Entwicklungsumgebung fast jedes Projekts sowie viele kleine Produktions-Installationen ab.

Mehrere Maschinen, schwankende Last, keine Ausfallzeiten erlaubt. Hier fängt Kubernetes an, sich zu lohnen. Das Kriterium: Wenn ein Dienst weiterlaufen muss, während eine Maschine ausfällt, und die Anzahl der Kopien sich automatisch an den Traffic anpassen soll, bist du hier richtig.

Die Mittelklasse. k3s ist ein leichtgewichtiges Kubernetes, das die Kernfunktionen mit viel weniger Komplexität bietet – ideal für ein paar Maschinen oder einen Raspberry Pi. Docker Swarm, in Docker enthalten, verbindet mehrere Maschinen mit Befehlen, die du bereits kennst. Und die Managed Services der großen Anbieter wie Amazon EKS, Google GKE und Azure AKS übernehmen den Control Plane für dich, auch wenn du das Kubernetes-Modell trotzdem lernen musst. Auf AWS gibt es zudem ECS, das Container ohne Kubernetes ausführt.

Lerne in dieser Reihenfolge. Erst ein Image bauen und ausführen, dann Compose für ein paar Dienste auf einer Maschine, erst danach Kubernetes – lokal mit minikube, kind oder dem integrierten Cluster in Docker Desktop. Wer die ersten beiden Schritte überspringt, landet beim Kopieren von YAML-Dateien, die er nicht versteht – und genau daraus entsteht der Ruf als unverständliches Werkzeug.

Versteckte Kosten #

Wer Kubernetes in einem kleinen Projekt einsetzt, merkt schnell, dass die Rechnung nicht nur technischer Natur ist:

  • Die Cluster-Maschinen verbrauchen Ressourcen, auch ohne Traffic, da Systemkomponenten ständig laufen.
  • Es erfordert kontinuierliches Know-how: interne Netzwerke, persistente Volumes, Credential-Management, Versions-Updates. Kubernetes veröffentlicht drei Versionen pro Jahr, und jede wird etwa vierzehn Monate lang unterstützt; man installiert es also nicht einfach und vergisst es dann wieder.
  • Das Debugging dauert länger: Zwischen deinem Code und der Anfrage des Nutzers liegen mehr Schichten, und es braucht Zeit, diese zu durchschauen.
  • Docker Desktop ist für große Unternehmen kostenpflichtig: Kostenlos für den privaten Gebrauch, zum Lernen und für Firmen mit weniger als 250 Mitarbeitern und unter 10 Millionen Dollar Umsatz; ansonsten wird ein Abonnement benötigt. Wenn du eine Open-Source-Alternative suchst, gibt es Podman, Rancher Desktop und auf dem Mac OrbStack oder Colima.

Es gibt gute Gründe, es nicht zu nutzen, wenn man es nicht braucht, aber keiner dieser Gründe rechtfertigt den Verzicht, wenn man es tatsächlich benötigt.

Wer bringt das Ganze um drei Uhr morgens wieder zum Laufen? Überlege dir, wie viele Personen im Team dazu in der Lage wären. Wenn die Antwort „eine“ lautet, stellt eine komplexe Infrastruktur ein zusätzliches Risiko dar. Hochverfügbarkeit erreicht man mit Werkzeugen, mit denen das Team vertraut ist, selbst wenn diese weniger mächtig sind.

Häufig gestellte Fragen #

Muss ich Docker lernen, bevor ich mit Kubernetes anfange? #

Ja, und es spart dir Zeit. Kubernetes orchestriert Container: Wenn du nicht weißt, was ein Image ist, wie man eines baut und wie man es startet, kopierst du am Ende Konfigurationen, ohne zu verstehen, was sie eigentlich bewirken.

Kann Kubernetes ohne Docker funktionieren? #

Ja, das ist sogar der Standard: Seit 2022 nutzen Cluster containerd oder CRI-O, um Container auszuführen. Docker bleibt jedoch das komfortabelste Werkzeug, um die Images zu erstellen, die Kubernetes dann später ausführt.

Was ist der Unterschied zwischen einem Container und einer virtuellen Maschine? #

Die virtuelle Maschine enthält ein vollständiges Betriebssystem, belegt Gigabytes an Speicherplatz und benötigt eine gewisse Zeit zum Booten. Ein Container nutzt den Kernel des Host-Systems, ist viel leichtgewichtiger und startet in einer Sekunde. Im Gegenzug ist er weniger isoliert; um Linux-Container auf Windows oder Mac auszuführen, wird dennoch eine kleine virtuelle Maschine benötigt, die Docker Desktop automatisch verwaltet.

Ersetzt Kubernetes Docker Compose? #

Auf einem einzelnen Rechner nicht, und viele Projekte bleiben für immer bei Compose. Compose beschreibt mehrere Dienste auf einem Computer und ist perfekt für die Entwicklung sowie für kleine Installationen geeignet. Kubernetes beschreibt dieselben Dienste, verteilt über mehrere Maschinen, inklusive der Regeln für Fehlertoleranz (Resilience).

Brauche ich das für eine Website oder einen Blog? #

Nein, in den allermeisten Fällen nicht. Eine statische Website, ein Blog oder eine Anwendung mit ein paar hundert Aufrufen am Tag laufen problemlos auf einem Server mit Docker oder sogar ganz ohne. Orchestrierung lohnt sich erst dann wirklich, wenn die Skalierung und die Anforderungen an die Verfügbarkeit es erzwingen.

Wann sollte man Docker Swarm statt Kubernetes wählen? #

Wenn du nur wenige Maschinen hast, ein kleines Team bist und schnell starten willst: Swarm lässt sich mit docker swarm init aktivieren und nutzt Dateien, die denen von Compose ähneln. Es ist jedoch deutlich weniger verbreitet und hat ein kleineres Ökosystem. Wenn du planst zu wachsen, lohnt es sich, direkt in Kubernetes zu investieren, vielleicht beginnend mit k3s.

Was kostet ein verwalteter Cluster? #

Das hängt vom Anbieter und der Größe ab. Der Hauptposten sind in der Regel die Instanzen, die den Cluster bilden und permanent laufen müssen, plus eine kleine Gebühr für das Control Plane bei einigen Diensten. Eine minimale Umgebung mit Redundanz ist auf jeden Fall teurer als ein einzelner Server: Rechne das vorher genau durch, bevor du startest.

Weiterlesen