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.
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.
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:
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.
Die Docker-Containerisierung bietet alle zuvor erwähnten Vorteile von Containern, einschließlich:
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:
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.
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.
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.