GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Docker vs. containerd vs. CRI-O:Ein ausführlicher Vergleich

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.

Docker
  1. Installieren Sie ModSecurity mit Apache in einem Docker-Container

  2. Eine Einführung in Docker

  3. So führen Sie MySQL in einem Docker-Container aus

  4. Wie man SSH in einen Docker-Container einfügt

  5. So installieren Sie Vim in einem Docker-Container

So führen Sie PHPMyAdmin in einem Docker-Container aus

So führen Sie Grafana in einem Docker-Container aus

So richten Sie einen Apache Docker-Container ein

So führen Sie Docker-Container aus

Was tun, wenn ein Docker-Container sofort beendet wird

Verwenden von Docker Desktop zum Verwalten eines Containers