Container-Lebenszyklus Der Lebenszyklus einer Container-Runtime Ein Container ist eine Reihe von Prozessen mit Isolationseigenschaften. Bei Verwendung von Docker Run wird ein Image ausgewählt, um ein unabhängiges Dateisystem bereitzustellen und das entsprechende laufende Programm anzugeben. Das hier angegebene laufende Programm wird als Anfangsprozess bezeichnet. Wenn der Anfangsprozess startet, wird auch der Container gestartet. Wenn der Anfangsprozess beendet wird, wird auch der Container beendet. Daher kann davon ausgegangen werden, dass der Lebenszyklus des Containers mit dem Lebenszyklus des ursprünglichen Prozesses übereinstimmt. Da sich im Container mehr als ein Anfangsprozess befindet, kann der Anfangsprozess selbst natürlich auch andere Unterprozesse oder von Docker Exec generierte Betriebs- und Wartungsvorgänge generieren, die ebenfalls in den Bereich der Anfangsprozessverwaltung fallen. Wenn der ursprüngliche Prozess beendet wird, werden auch alle untergeordneten Prozesse beendet. Auch dies dient dazu, Ressourcenverluste zu verhindern. Dieser Ansatz bringt jedoch auch einige Probleme mit sich. Erstens sind die Programme in der Anwendung häufig zustandsbehaftet und können einige wichtige Daten generieren. Wenn ein Container beendet und gelöscht wird, gehen die Daten verloren, was für den Anwendungspartner inakzeptabel ist. Daher müssen die vom Container generierten wichtigen Daten beibehalten werden. Der Container kann Daten direkt in einem angegebenen Verzeichnis speichern, das als Datenvolumen bezeichnet wird. Datenvolumes weisen einige Merkmale auf. Eine davon ist, dass der Lebenszyklus eines Datenvolumes unabhängig vom Lebenszyklus eines Containers ist. Mit anderen Worten: Vorgänge wie das Erstellen, Ausführen, Stoppen und Löschen eines Containers haben nichts mit einem Datenvolume zu tun, da es sich um ein spezielles Verzeichnis handelt, das zum Fortbestehen von Containern verwendet wird. Vereinfacht ausgedrückt mounten wir das Datenvolumen in den Container, sodass der Container Daten in das entsprechende Verzeichnis schreiben kann und das Verlassen des Containers nicht zu Datenverlust führt. Im Allgemeinen gibt es zwei Möglichkeiten, Datenmengen zu verwalten: Die erste Methode besteht darin, das Hostverzeichnis über Bind direkt in den Container einzubinden. Diese Methode ist relativ einfach, bringt jedoch Betriebs- und Wartungskosten mit sich, da sie vom Hostverzeichnis abhängt und eine einheitliche Verwaltung aller Hosts erfordert. Die zweite Möglichkeit besteht darin, die Verzeichnisverwaltung an die Runtime-Engine zu übergeben. Container-Projektarchitektur Moby-Container-Engine-Architektur Moby ist die beliebteste Containerverwaltungs-Engine. Der Moby-Daemon ermöglicht die Verwaltung von Containern, Images, Netzwerken und Volumes. Die wichtigste Komponente, von der der Moby-Daemon abhängt, ist Containerd. Containerd ist eine vom Moby-Daemon unabhängige Engine zur Verwaltung von Container-Runtimes, die Container- und Image-Verwaltung bereitstellen kann. Die zugrunde liegende Schicht von containerd ist das containerd-Shim-Modul, das einem Daemon-Prozess ähnelt. Für dieses Design gibt es mehrere Gründe: Erstens muss containerd den Container-Lebenszyklus verwalten, und Container können von unterschiedlichen Container-Laufzeiten erstellt werden, sodass eine flexible Plug-In-Verwaltung erforderlich ist. Shim wurde für verschiedene Container-Laufzeitumgebungen entwickelt, sodass es von containerd getrennt und über Plug-Ins verwaltet werden kann. Zweitens kann Shim dynamisch von Containerd übernommen werden, da es als Plug-In implementiert ist. Ohne diese Funktion wird der Container bei einer unerwarteten Beendigung des Moby-Daemons oder Containerd-Daemons nicht verwaltet und verschwindet oder wird beendet, was sich auf die Ausführung der Anwendung auswirkt. Da Moby oder Containerd jederzeit aktualisiert werden können, ist es ohne Shim-Mechanismus unmöglich, ein Upgrade direkt durchzuführen oder das Geschäft zu beeinträchtigen. Daher ist Containerd Shim sehr wichtig, da es die Möglichkeit einer dynamischen Übernahme implementiert. Das Obige ist nur eine allgemeine Einführung in Moby. Container vs. VMs Unterschiede zwischen Containern und VMs VM verwendet Hypervisor-Virtualisierungstechnologie, um Hardwareressourcen wie CPU und Speicher zu simulieren, sodass auf dem Hostcomputer ein Gastbetriebssystem eingerichtet werden kann, was oft als Installation einer virtuellen Maschine bezeichnet wird. Jedes Gastbetriebssystem verfügt über einen unabhängigen Kernel, wie etwa Ubuntu, CentOS und sogar Windows. Unter einem solchen Gastbetriebssystem ist jede Anwendung unabhängig von den anderen, und VM kann einen besseren Isolationseffekt bieten. Dieser Isolationseffekt hat jedoch seinen Preis, da ein Teil der Rechenressourcen an die Virtualisierung übergeben werden muss, was es schwierig macht, die vorhandenen Rechenressourcen voll auszunutzen. Darüber hinaus benötigt jedes Gastbetriebssystem viel Speicherplatz. Beispielsweise erfordert die Installation des Windows-Betriebssystems 10 bis 30 GB Speicherplatz, und Ubuntu benötigt 5 bis 6 GB. Gleichzeitig startet diese Methode sehr langsam. Genau aufgrund der Unzulänglichkeiten der virtuellen Maschinentechnologie entstand die Containertechnologie. Container dienen zur Verarbeitung von Prozessen, daher ist kein Gastbetriebssystem erforderlich. Es wird lediglich ein unabhängiges Dateisystem benötigt, um den erforderlichen Dateisatz bereitzustellen. Die gesamte Dateiisolierung erfolgt auf Prozessebene, daher ist die Startzeit schneller als bei VM und auch der erforderliche Speicherplatz ist geringer als bei VM. Natürlich ist die Isolierung auf Prozessebene nicht so gut wie gedacht und der Isolierungseffekt ist viel schlechter als der von VM. Gesamt: Im Vergleich zu VMs haben Container ihre eigenen Vor- und Nachteile, daher entwickelt sich auch die Containertechnologie in Richtung starker Isolation. Der obige Artikel über die Lebenszyklusarchitektur von Docker-Containern und ihre Unterschiede zur VM ist alles, was ich mit Ihnen teilen kann. Ich hoffe, er kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Das könnte Sie auch interessieren:
|
<<: Über das durch die HTML-Kodierung verursachte verstümmelte Problem
>>: So konvertieren Sie Zeilen in Spalten in MySQL
In diesem Artikel finden Sie eine ausführliche An...
Vor Kurzem habe ich Apache auf nginx umgestellt. ...
Lassen Sie uns zunächst über den Wert von Web-Fro...
Inhaltsverzeichnis Umfassender Vergleich Aus der ...
Vorwort: Bei Vorstellungsgesprächen für verschied...
Vorwort Bei der Anwendung von Datenbanken haben P...
Aktivieren Sie Remote-Zugriffsrechte für MySQL My...
Es gibt viele Möglichkeiten, eine globale ID zu g...
Der folgende Befehl wird häufig verwendet: chmod ...
In diesem Artikel wird der spezifische Code des J...
Dieser Artikel beschreibt anhand von Beispielen v...
Vorwort: Partitionierung ist ein Tabellenentwurfs...
Warum möchte ich den Inhalt in diesem Bereich orga...
Heureka: 1. Erstellen Sie ein JDK-Image Starten S...