Einführung
Die Bereitstellung von Containern ist eine praktische Methode zur Gewährleistung von Portabilität, Skalierbarkeit und Agilität in der DevOps-Welt. Vom Testen bis zur Produktion erleichtern Container den gesamten Softwareentwicklungsprozess.
Plattformen für das Container-Management und die Orchestrierung sind so konzipiert, dass sie für den Endbenutzer intuitiv und unkompliziert sind. Die Plattformen selbst sind jedoch komplex und bestehen aus mehreren koordinierten Projekten.
In diesem Artikel werden die Unterschiede zwischen drei wichtigen Teilen des Containermanagement-Ökosystems erläutert:Docker, containerd und CRI-O.
Das Container-Ökosystem
Docker und Kubernetes sind zwei führende Plattformen im Container-Ökosystem. Um die Interoperabilität zu gewährleisten, einigte sich die Community auf mehrere Standards.
Zwei der wichtigsten Standards sind:
- CRI - Container-Laufzeitschnittstelle. Dadurch kann Kubernetes mit verschiedenen Container-Laufzeiten kompatibel sein, einschließlich containerd von Docker .
- OCI - Open-Container-Initiative. Es standardisiert Container-Images und Laufzeiten.
Die folgende Infografik zeigt, wie CRI und OCI dabei helfen, Kubernetes mit Docker zu verbinden:
Docker
Docker ist eine Reihe von Container-Management-Projekten, die von der Firma Docker betrieben werden. Diese Projekte arbeiten zusammen, um eine umfassende Plattform für die Bereitstellung von Containern bereitzustellen.
Die wichtigsten Projekte sind:
- Docker-CLI - Ein Befehlszeilenschnittstellenprogramm. Benutzer erstellen und verwalten Docker-Container, indem sie Docker-CLI-Befehle ausgeben.
- containerd - Ein Daemon, der auf die Benutzerbefehle hört. Es zieht und speichert die angeforderten Bilder und steuert den Container-Lebenszyklus.
- runC - Eine leichte, portable Container-Laufzeitumgebung. runC ist eine Low-Level-Komponente, die Komponenten integriert, die Docker für die Interaktion mit dem lokalen System benötigt. Die von diesem Tool erstellten Container sind OCI-kompatibel.
Docker-Images
Ein Docker-Image ist eine schreibgeschützte Vorlage, die den Anwendungscode zusammen mit den Bibliotheken, Tools und anderen Abhängigkeiten enthält, die für das ordnungsgemäße Funktionieren der Anwendung erforderlich sind. Wenn ein Benutzer den Ausführungsbefehl in Docker ausgibt, wird die Image-Vorlage verwendet, um einen App-Container bereitzustellen.
Docker-Images werden mithilfe von Dockerfile erstellt, einem Textdokument, das die erforderlichen Bildinformationen enthält. Der build
Der Befehl verwendet Dockerfile und einen Kontext, um das Image zu erstellen.
Docker für Kubernetes
Container Runtime Interface ist ein Plugin, das es Kubernetes ermöglicht, mit anderen Containerlaufzeiten zu kommunizieren. Da Docker CRI jedoch nicht implementiert, hat Kubernetes eine Kompatibilitätsschicht namens dockershim eingeführt . Diese Schicht überbrückt die beiden APIs.
Ab Version 1.23 erfordert Kubernetes Laufzeiten, die CRI-kompatibel sind. Dies bedeutet, dass Dockershim jetzt veraltet ist und Docker Engine nicht mehr als Laufzeitumgebung unterstützt wird. Kubernetes kann jedoch weiterhin über Containerd mit Docker kommunizieren, das mit einem Plugin CRI-konform sein kann.
Container Runtime Interface (CRI)
Obwohl Kubernetes eine Container-Orchestrierungsplattform ist, muss es auf der untersten Ebene auch Container erstellen und verwalten. Um dies zu erreichen, verwendet Kubernetes Container-Laufzeiten.
Am Anfang war Docker Engine die einzige verfügbare Laufzeit auf der Plattform. Aber die Popularität der Containerisierung führte zu konkurrierenden Lösungen und der Notwendigkeit, dass Kubernetes sie alle unterstützt. Mit dem Container Runtime Interface Plugin kann Kubernetes mit allen wichtigen Laufzeitumgebungen kommunizieren.
Container
containerd ist eine von Docker erstellte Laufzeitlösung. Dieser Daemon ist für Linux- und Windows-Betriebssysteme verfügbar. Als Teil des Docker-Projekts verwaltet containerd die Übertragung und Speicherung von Bildern sowie die Erstellung, Ausführung und Überwachung von Containern.
Kubernetes benötigt nicht die gesamte Docker-Plattform, um containerd zu verwenden. Mit dem CRI-Kompatibilitäts-Plugin können Kubernetes und containerd direkt kommunizieren.
CRI-O
CRI-O ist eine OCI-kompatible leichtgewichtige Implementierung des CRI. Es wurde als Alternative zur Docker Engine entwickelt.
Mit CRI-O können Sie Kubernetes-Pods starten und erforderliche Images abrufen. Es ist jedoch keine Laufzeit. Stattdessen wird es verwendet, um andere Low-Level-OCI-kompatible Laufzeiten wie runC oder Kata zu starten.
Open-Container-Initiative (OCI)
Docker und andere wichtige Akteure der Containerindustrie gründeten 2015 die Open Container Initiative (OCI). Die OCI hat das Ziel, Standards für Containerformate und Laufzeiten zu schaffen. Derzeit hat die OCI zwei Spezifikationen:
- Bildspezifikation - die Bildspezifikation, die beschreibt, wie ein OCI-konformes Bild erstellt wird.
- Laufzeitspezifikation - die Laufzeitspezifikation zum Entpacken des Dateisystempakets.
runC
runC ist eine von Docker erstellte universelle Containerlaufzeit. Obwohl es Teil des Docker-Toolsets ist, erfordert es keine Docker-Plattform, um ausgeführt zu werden.
Einige wichtige Merkmale von runC sind:
- Volle Unterstützung für Linux-Namespaces.
- Native Unterstützung für Linux-Sicherheitsfunktionen wie AppArmor, SELinux usw.
- Native Unterstützung für Windows 10-Container.
- Container, die runC erstellt und verwaltet, sind OCI-konform.