Kubernetes vs. Docker: Warum nicht beides?

IBM Spectrum Fusion RF-Testkammer mit Ingenieurteam

Ist Kubernetes oder Docker die bessere Wahl (oder kommt es überhaupt noch in Frage)?

Bei den Containertechnologien etablieren sich zwei Namen als führend im Bereich Open Source: Kubernetes und Docker. Und obwohl es sich um grundlegend unterschiedliche Technologien handelt, die Benutzer bei der Containerverwaltung unterstützen, ergänzen sie sich gegenseitig und können in Kombination leistungsstark sein. In dieser Hinsicht geht es bei der Entscheidung für Kubernetes oder Docker nicht darum, welche Option besser ist, sondern zu entscheiden, welche Option besser ist. in Wirklichkeit stehen sie nicht in Konkurrenz zueinander und können tatsächlich im Tandem verwendet werden. Auf die Frage, ob Kubernetes oder Docker die bessere Wahl ist, lautet die Antwort also: keines von beiden.

Die Tatsache, dass Kubernetes und Docker komplementäre Container-Technologien sind, klärt eine weitere häufige Frage: Ersetzt Kubernetes Docker?

Kurz gesagt: Nein. Da Kubernetes keine konkurrierende Technologie ist, rührt diese Frage wahrscheinlich von der Nachricht her, die 2021 bekannt wurde, dass Kubernetes Docker nicht mehr als Container-Laufzeitoption unterstützen würde (d. h. eine Container-Komponente, die während des gesamten Containerisierungsprozesses mit dem Betriebssystemkernel kommuniziert). Kubernetes und Docker sind jedoch weiterhin kompatibel und bieten bei gemeinsamer Verwendung klare Vorteile, wie wir später in diesem Beitrag noch genauer erläutern werden. Zunächst ist es wichtig, mit der Basistechnologie zu beginnen, die Kubernetes und Docker miteinander verbindet – Container.

 

Was ist ein Container?

Ein Container ist eine ausführbare Softwareeinheit, die Anwendungscode mit seinen Abhängigkeiten verpackt, sodass er auf jeder IT-Infrastruktur ausgeführt werden kann. Ein Container steht für sich allein; sie ist vom Host-Betriebssystem – in der Regel Linux – abstrahiert, wodurch sie in verschiedenen IT-Umgebungen portabel ist.

Eine Möglichkeit, das Konzept eines Containers zu verstehen, ist ein Vergleich mit einer virtuellen Maschine (VM). Beide basieren auf Virtualisierungstechnologien, aber während ein Container ein Betriebssystem virtualisiert, nutzt eine VM einen Hypervisor – eine schlanke Softwareschicht zwischen der VM und der Hardware eines Computers – um physische Hardware zu virtualisieren. 

Bei der traditionellen Virtualisierung enthält jede VM eine vollständige Kopie eines Gastbetriebssystems (OS), eine virtuelle Kopie der Hardware, die für die Ausführung des Betriebssystems und einer Anwendung (und die zugehörigen Bibliotheken und Abhängigkeiten) benötigt wird. Ein Container hingegen umfasst nur eine Anwendung und ihre Bibliotheken und Abhängigkeiten. Das Fehlen eines Gasthosts reduziert die Größe eines Containers erheblich und macht ihn leicht, schnell und portabel. Außerdem verwendet ein Container automatisch die DNS-Einstellungen des Hosts.

Ingenieure können Container verwenden, um schnell Anwendungen zu entwickeln, die auf einer großen Anzahl verteilter Systeme und plattformübergreifenden Umgebungen konsistent laufen. Die Portabilität von Containern beseitigt viele der Konflikte, die durch Unterschiede bei Tools und Software zwischen funktionalen Teams entstehen. 

Dadurch eignen sie sich besonders gut für DevOps-Workflows und erleichtern Entwicklern und IT-Betreibern die umgebungsübergreifende Zusammenarbeit. Klein und leichtgewichtig eignen sich Container auch ideal für Microservices -Architekturen, in denen Anwendungen aus lose gekoppelten, kleineren Diensten bestehen. Und die Containerisierung ist oft der erste Schritt bei der Modernisierung lokaler Anwendungen und deren Integration mit Cloud-Services.

Was ist Docker?

Docker ist eine Open-Source- Containerisierungsplattform. Im Grunde handelt es sich um ein Toolkit, mit dem Entwickler Container einfacher, sicherer und schneller erstellen, bereitstellen und verwalten können. Dieses Toolkit wird auch als Container bezeichnet.

Obwohl es als Open-Source-Projekt begann, bezieht sich Docker heute auch auf Docker, Inc., das Unternehmen, das das kommerzielle Docker-Produkt herstellt. Derzeit ist es das beliebteste Tool zum Erstellen von Containern, unabhängig davon, ob Entwickler Windows, Linux oder MacOS verwenden.

In der Tat waren Container-Technologien bereits Jahrzehnte vor der Veröffentlichung von Docker im Jahr 2013 verfügbar. In der Anfangszeit waren Linux Container (oder LXC) die am weitesten verbreiteten dieser Lösungen. Docker basierte auf LXC, aber die angepasste Technologie von Docker überholte LXC schnell und wurde zur beliebtesten Plattform der Containerisierung. 

Zu den wichtigsten Attributen von Docker gehört seine Portabilität. Docker-Container können auf jeder Desktop-, Rechenzentrum- oder Cloud-Umgebung ausgeführt werden. In jedem Container kann nur ein Prozess ausgeführt werden, sodass eine Anwendung kontinuierlich ausgeführt werden kann, während ein Teil von ihr aktualisiert oder repariert wird.

Zu den Tools und Terminologien, die häufig bei Docker verwendet werden, gehören die folgenden:

  • Docker Engine: Die Laufzeitumgebung, in der Entwickler Container erstellen und ausführen können.
  • Dockerfile: Eine einfache Textdatei, die alles definiert, was für die Erstellung eines Docker-Container-Images erforderlich ist, z. B. die Netzwerkspezifikationen des Betriebssystems und die Dateispeicherorte. Es ist im Wesentlichen eine Liste von Befehlen, die Docker Engine ausführen wird, um das Image zusammenzustellen.
  • Docker Compose ist ein Tool zum Definieren und Ausführen von Multi-Container-Docker-Anwendungen. Es erstellt eine YAML-Datei, um festzulegen, welche Dienste in der Anwendung enthalten sind, und kann Container mit einem einzigen Befehl über die Docker CLI bereitstellen und ausführen.

Sehen wir uns nun noch einmal an, warum Kubernetes Docker als Container-Laufzeitumgebung nicht mehr unterstützt. Wie oben in diesem Abschnitt erwähnt, ist Docker ein Container und keine Container-Laufzeitumgebung. Das bedeutet, dass Docker auf einer zugrunde liegenden Container-Laufzeitumgebung aufbaut, um den Benutzern Funktionen und Tools über eine Benutzeroberfläche zur Verfügung zu stellen. Um Docker als Laufzeitumgebung zu unterstützen, musste Kubernetes eine separate Laufzeitumgebung mit dem Namen Docker Shim unterstützen und implementieren, die im Wesentlichen zwischen den beiden Technologien lag und die Kommunikation ermöglichte.

Dies geschah zu einer Zeit, als nicht viele Container-Runtimes verfügbar waren. Mit CRI-O als Beispiel für eine solche Container-Laufzeit bietet Kubernetes den Benutzern zahlreiche Optionen für die Container-Laufzeit. Viele davon verwenden die standardmäßige Container Runtime Interface (CRI), eine Möglichkeit für Kubernetes und den Container Laufzeit, um zuverlässig zu kommunizieren, ohne dass eine mittlere Schicht als Vermittler fungiert.

Doch auch wenn Kubernetes Docker als Laufzeit nicht mehr speziell unterstützt, kann es weiterhin Container ausführen und verwalten, die mit der Open Container Initiative (OCI) erstellt wurden, Dockers eigenes Image-Format, das es Ihnen ermöglicht, Docker-Dateien zu verwenden und Docker-Images zu erstellen. Mit anderen Worten: Dockers hat im Kubernetes-Ökosystem noch viel zu bieten.

Was sind die Vorteile von Docker?

Die Docker-Containerisierung bietet alle zuvor erwähnten Vorteile von Containern, einschließlich:

  • Leichtgewichtige Portabilität: Containerisierte Anwendungen können von jeder Umgebung in eine andere verschoben werden (wo auch immer Docker ausgeführt wird), und sie funktionieren unabhängig vom Betriebssystem.
  • Agile Anwendungsentwicklung: Die Containerisierung erleichtert die Einführung von CI/CD-Prozessen und die Nutzung der Vorteile agiler Methoden wie DevOps. So können beispielsweise containerisierte Apps in einer Umgebung getestet und in einer anderen Umgebung bereitgestellt werden, um auf sich schnell ändernde Geschäftsanforderungen zu reagieren.
  • Skalierbarkeit: Docker-Container können schnell erstellt werden und mehrere Container können effizient und gleichzeitig verwaltet werden.

Zu den weiteren Funktionen der Docker-API gehören die Möglichkeit, Container-Images automatisch zu verfolgen und zurückzusetzen, vorhandene Container als Basis-Images für die Erstellung neuer Container zu verwenden und Container auf der Grundlage des Quellcodes von Anwendungen zu erstellen. Docker wird von einer dynamischen Entwicklergemeinschaft unterstützt, die über den Docker Hub Tausende von Containern im Internet teilt.

Während Docker sich gut für kleinere Anwendungen eignet, können große Unternehmensanwendungen eine große Anzahl von Containern umfassen – manchmal Hunderte oder sogar Tausende –, was für IT-Teams, die mit der Verwaltung dieser Anwendungen betraut sind, überwältigend wird. Hier kommt die Container-Orchestrierung zum Einsatz. Docker verfügt über ein eigenes Orchestrierungstool, Docker Swarm, aber die mit Abstand beliebteste und robusteste Option ist Kubernetes.

Docker verfügt über mehrere Befehle, die bei der Erstellung und Ausführung von Containern verwendet werden:

  • Docker-Build : Dieser Befehl erstellt ein neues Docker-Image aus dem Quellcode (d. h. aus einer Docker-Datei und den erforderlichen Dateien).
  • docker create : Dieser Befehl erstellt ein neues Docker-Image aus einem Image, ohne es zu starten. Dazu muss eine beschreibbare Containerschicht über dem Image erstellt und vorbereitet werden.
  • Docker Run Dieser Befehl funktioniert genau wie der docker create  Befehl, nur dass er nach der Erstellung ausgeführt wird.
  • docker exec : Dieser Befehl wird verwendet, um einen neuen Befehl in einem Container auszuführen, der bereits ausgeführt wird.

Was ist Kubernetes?

Kubernetes ist eine Open-Source-Plattform zur Containerorchestrierung für die Planung und Automatisierung der Bereitstellung, Verwaltung und Skalierung von containerisierten Anwendungen. Container arbeiten in einer Architektur mit mehreren Containern, die als „Cluster“ bezeichnet wird. Ein Kubernetes-Cluster enthält einen Container, der als Steuerungsebene bestimmt wird und Workloads für die übrigen Container – oder Worker-Knoten – im Cluster plant.

Der Master-Knoten bestimmt, wo Anwendungen (oder Docker-Container) gehostet werden sollen, wie sie zusammengestellt werden und verwaltet ihre Orchestrierung. Durch die Gruppierung von Containern, die eine Anwendung bilden, in Clustern erleichtert Kubernetes die Erkennung von Diensten und die Verwaltung großer Mengen von Containern während ihrer gesamten Lebenszyklen. 

Google hat Kubernetes 2014 als Open-Source-Projekt eingeführt. Jetzt wird es von einer Open-Source-Grundlage namens Cloud Native Computing Foundation (CNCF) verwaltet. Kubernetes wurde für die Container-Orchestrierung in Produktionsumgebungen entwickelt und ist unter anderem aufgrund seiner robusten Funktionalität, einer aktiven Open-Source-Community mit Tausenden von Mitwirkenden sowie der Unterstützung und Portierbarkeit durch führende Public-Cloud-Provider (z. B. IBM Cloud, Google, Azure und AWS) beliebt.

Was sind die Vorteile von Kubernetes?

  • Automatisierte Bereitstellung: Kubernetes plant und automatisiert die Container-Bereitstellung auf mehreren Rechenknoten, die VMs oder Bare-Metal-Server sein können. 
  • Serviceerkennung und Lastausgleich: Ein Container wird im Internet verfügbar gemacht und es wird ein Lastausgleich vorgenommen, wenn Datenverkehrsspitzen auftreten, um die Stabilität zu gewährleisten.
  • Auto-Scaling-Funktionen: Startet automatisch neue Container, um schwere Lasten zu bewältigen, ob basierend auf CPU-Auslastung, Speicherschwellen oder benutzerdefinierten Metriken.
  • Automatische Fehlerbehebungsfunktionen: Kubernetes startet Container neu, ersetzt oder plant sie neu, wenn sie ausfallen oder wenn Knoten sterben, und tötet Container, die nicht auf benutzerdefinierte Zustandsprüfungen reagieren.
  • Automatisierte Rollouts und Rollbacks: Es werden Anwendungsänderungen eingeführt und der Anwendungszustand wird auf Probleme überwacht, Änderungen werden rückgängig gemacht, wenn etwas schiefläuft.
  • Speicherorchestrierung: Stellt bei Bedarf automatisch ein persistentes lokales oder Cloud-Speichersystem Ihrer Wahl ein, um die Latenz zu reduzieren – und die Erfahrung zu verbessern.
  • Dynamische Volume-Bereitstellung: Ermöglicht Cluster-Administratoren die Erstellung von Speicher-Volumes, ohne dass sie ihre Speicherprovider manuell aufrufen oder Objekte erstellen müssen.

Kubernetes und Docker: Die beste Container-Lösung finden

Obwohl Kubernetes und Docker unterschiedliche Technologien sind, ergänzen sie sich in hohem Maße und bilden eine leistungsstarke Kombination. Docker liefert den Teil der Containerisierung, der es Entwicklern ermöglicht, Anwendungen über die Befehlszeile einfach in kleine, isolierte Container zu packen. Entwickler können diese Anwendungen dann in ihrer gesamten IT-Umgebung ausführen, ohne sich Gedanken über Kompatibilitätsprobleme machen zu müssen. Wenn eine Anwendung während des Testens auf einem einzelnen Knoten ausgeführt wird, kann sie überall ausgeführt werden.

Wenn die Nachfrage steigt, sorgt Kubernetes für die Orchestrierung von Containern, die Planung und automatische Bereitstellung in verschiedenen IT-Umgebungen, um eine hohe Verfügbarkeit zu gewährleisten. Kubernetes führt nicht nur Container aus, sondern bietet auch die Vorteile von Lastausgleich, automatische Fehlerbehebung sowie automatisierten Rollouts und Rollbacks. Außerdem verfügt die Lösung über eine grafische Benutzeroberfläche, die eine einfache Bedienung ermöglicht.

Für Unternehmen, die damit rechnen, dass sie ihre Infrastruktur in Zukunft skalieren wollen, kann es sinnvoll sein, Kubernetes von Anfang an einzusetzen. Und für diejenigen, die Docker bereits verwenden: Kubernetes nutzt vorhandene Container und Workloads und übernimmt gleichzeitig die komplexen Fragen, die mit dem Skalieren verbunden sind. 

Integration zur besseren Automatisierung und Verwaltung von Anwendungen

Spätere Versionen von Docker verfügen über eine integrierte Integration mit Kubernetes. Diese Funktion ermöglicht es Entwicklungsteams, alle containerisierten Anwendungen, die sie durch Docker erstellt haben, effektiver zu automatisieren und zu verwalten.

Letztendlich ist es eine Frage, welche Kombination von Tools Ihr Team benötigt, um seine Geschäftsziele zu erreichen. Sehen Sie sich die ersten Schritte mit diesem Kubernetes-Tutorial an und erkunden Sie den IBM Cloud Kubernetes Service, um mehr zu erfahren.

Verdienen Sie ein Badge durch kostenlose browserbasierte Kubernetes-Tutorials mit IBM CloudLabs.

Autor

Machen Sie den nächsten Schritt

Machen Sie erste Schritte mit einer vollständig verwalteten Red Hat OpenShift-Plattform oder erkunden Sie die Flexibilität des IBM Cloud Kubernetes Ökosystems. Beschleunigen Sie Ihren Entwicklungs- und Bereitstellungsprozess mit skalierbaren, sicheren Lösungen, die auf Ihre Bedürfnisse zugeschnitten sind.

Red Hat OpenShift erkunden Kubernetes kennenlernen