1) Grundkenntnisse über Containerd
Ab Version 1.11 von Docker wird die Ausführung von Docker-Containern nicht einfach durch den Docker-Daemon gestartet, sondern durch die Integration mehrerer Komponenten wie Containerd und Runc.
Obwohl das Docker-Daemon-Daemon-Modul ständig überarbeitet wird, haben sich die Grundfunktionen und die Positionierung nicht wesentlich geändert. Es handelte sich immer um eine CS-Architektur. Der Daemon ist für die Interaktion mit dem Docker-Client und die Verwaltung von Docker-Images und -Containern verantwortlich.
Die Komponente containerd ist in der aktuellen Architektur für das Lifecycle-Management der Container auf den Cluster-Knoten verantwortlich und stellt dem Docker-Daemon eine gRPC-Schnittstelle zur Verfügung.
Containerd-shim ist ein Plugin für Containerd, das als Prozessmanager fungiert, Befehle von Containerd empfängt und Prozesse innerhalb des Containers erstellt und verwaltet. Es kann mit Runc zusammenarbeiten, sodass Vorgänge wie das Erstellen, Starten, Stoppen, Anhalten und Fortsetzen von Containern effektiv abgewickelt werden können. Kurz gesagt, die Containererstellung erfolgt durch Containerd-shim.
Wir alle wissen, dass das Erstellen eines Containers eine gewisse Konfiguration von Namespaces und Kontrollgruppen sowie das Mounten des Root-Dateisystems erfordert. Tatsächlich verfügen diese Vorgänge bereits über Standardspezifikationen, nämlich OCI (Open Container Standard).
OCI ist im Wesentlichen ein Spezifikationsdokument, das hauptsächlich den Strukturstandard des Container-Images und den Standard des Containers festlegt, der Betriebsanweisungen wie Erstellen, Starten, Stoppen, Löschen und andere Befehle empfängt. Tatsächlich implementiert Runc den Verwaltungscontainer gemäß verschiedenen Spezifikationen dieser OCI.
Daher wird Containerd-Shim verwendet, um Runc aufzurufen, um den Container zu starten. Nach dem Ausführen des Containers wird Runc direkt beendet und Containerd-Shim wird zum übergeordneten Prozess des Containerprozesses. Er ist für die Erfassung des Status des Containerprozesses verantwortlich und es an Containerd melden. Und nachdem der Prozess mit PID 1 im Container beendet wurde, übernimmt er die Bereinigung des untergeordneten Prozesses im Container, um sicherzustellen, dass kein Zombie-Prozess erscheint.
Containerd ist eine Container-Laufzeitumgebung nach Industriestandard, bei der Einfachheit, Robustheit und Portabilität im Vordergrund stehen. Containerd kann für Folgendes verantwortlich sein:
-
Verwalten Sie den Lebenszyklus von Containern (von der Erstellung bis zur Zerstörung)
-
Containerbilder ziehen/schieben
-
Speicherverwaltung (Verwaltung der Speicherung von Bild- und Containerdaten)
-
Rufen Sie runc auf, um den Container auszuführen (interagieren Sie mit Container-Laufzeiten wie runc).
-
Verwalten Sie Container-Netzwerkschnittstellen und Netzwerke
2) Container-Installation
Die folgenden Schritte dienen zur Installation von Containerd auf Rocky8/RHEL8
Installieren Sie zuerst das Tool yum-utils
yum install -y yum-utils
Konfigurieren Sie das offizielle Yum-Warehouse von Docker. Wenn Sie dies getan haben, können Sie es überspringen
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Containerd installieren
yum install containerd.io -y
Starten Sie den Dienst und stellen Sie ihn so ein, dass er beim Booten automatisch startet
systemctl enable containerd
systemctl start containerd
3) Containerd-Befehlszeilentool ctr
Ctr ist das Befehlszeilentool von Containerd, mit dem Aufgaben in Containerd ausgeführt und verwaltet werden können. ctr wird hauptsächlich für die Entwicklung und das Debuggen verwendet, nicht in der Produktionsumgebung. Die übliche Verwendung ist wie folgt:
Überprüfen Sie die Containerversion
ctr version
Bild ziehen
ctr images pull docker.io/library/busybox:latest #其中images可以简写为i
Lokale Spiegel auflisten
ctr images list #或者简写
ctr i ls
Tag ändern
ctr i tag docker.io/library/busybox:latest busybox:latest
Spiegel löschen
ctr i rm docker.io/library/busybox:latest
Container ausführen
ctr run -d busybox:latest busybox
Laufende Container auflisten
ctr containers list #或者简写为
ctr c ls
Listen Sie Aufgaben auf
ctr tasks ls #或者简写
ctr t ls
Befehle im Container ausführen
ctr t exec --exec-id 1860 busybox ls #1860为任务ID
in den Behälter
ctr t exec -t --exec-id 1860 busybox sh
Container löschen
ctr t kill -s SIGKILL busybox #先杀掉进程
ctr c rm busybox #再删除容器
Kurz gesagt, es gibt immer noch viele Unterschiede zwischen diesem CTR-Tool und dem Befehlszeilentool von Docker.