Heute schauen wir uns das Konzept der Containerebenen an. Im vorherigen Abschnitt haben wir gelernt, dass ein Container ein Prozess ist. Basierend auf diesem Prozess werden die folgenden drei Teile hinzugefügt: 1. Starten Sie die Linux-Namespace-Konfiguration, um eine Isolation von der physischen Maschine zu erreichen. 2. Legen Sie Cgroups-Parameter fest, um die Containerressourcen zu begrenzen. 3. Generieren Sie ein Systemdateiverzeichnis, dh die RootFS-Datei, auch Spiegeldatei genannt Hierbei ist zu beachten, dass rootfs nur eine Kombination aus Basisdateien ist, die der Container verwenden muss, und nicht den Betriebssystemkernel enthält. Der Betriebssystemkernel des Containers verwendet weiterhin den Kernel des Hostcomputers. Natürlich ist die Existenz von Root-FS nicht bedeutungslos. Seine Existenz ermöglicht dem Container die wichtigste Leistung: Konsistenz. 01 BehälterkonsistenzDas Root-FS des Containers verpackt alle Dateien und Verzeichnisse des Betriebssystems, einschließlich aller Abhängigkeiten. Mit dieser Funktion müssen Benutzer, unabhängig davon, ob sich der Container lokal oder in der Cloud befindet, nur das verpackte Container-Image entpacken und die Anwendungsausführungsumgebung wird eingerichtet. Dies ist die Konsistenz des Behälters. 02 Konzept der Schicht„Der Grund, warum ich weit sehen kann, ist, dass ich auf den Schultern von Riesen stehe“, diesen Satz hat Newton einst gesagt und er gilt noch heute. „Das Rad nicht neu erfinden.“ Wenn wir Anwendungen entwickeln, müssen wir dafür nur das Linux-Betriebssystem verwenden. Wir müssen kein Linux-System neu entwickeln, um unsere Anwendungen auszuführen. Wenn wir während der Verwendung des Containers bereits ein vorhandenes MySQL-Container-Image mit Daten A darin haben und andere Personen auch ein MySQL-Container-Image zum Importieren ihrer Daten B möchten, müssen wir nur Daten A in unserem eigenen MySQL-Container löschen und dann Daten B erneut importieren. Sobald im oben beschriebenen Szenario Daten A gelöscht und Daten B importiert wurden, können wir diesen Container nicht mehr selbst verwenden, da Daten A gelöscht wurden. Dies ist offensichtlich nicht das gewünschte Ergebnis. Offensichtlich erfordern sowohl Datensatz A als auch Datensatz B ein Container-Image (also RootFS) mit installiertem MySQL, aber ohne Daten. Bei der Entwicklung der Docker-Software wurde das Konzept der „Schicht“ eingeführt, das dieses Problem geschickt löste. Das Konzept der „Schicht“ wird durch das Union-Dateisystem AuFS implementiert, der vollständige Name lautet Advance UnionFS. Das Konzept ist nicht schwer zu verstehen, wie unten gezeigt: Verzeichnis 1 enthält Datei a, Datei c Verzeichnis 2 enthält Datei b, Datei c Durch die Kombination der Dateien werden die Verzeichnisse 1 und 2 in Verzeichnis 3 gemountet. Zu diesem Zeitpunkt enthält Verzeichnis 3 drei Dateien: a, b und c. Wenn zu diesem Zeitpunkt die Dateien a, b und c im Verzeichnis 3 geändert werden, werden die entsprechenden Verzeichnisse 1 und 2 ebenfalls wirksam. Wie man Ebenen durch ein „Union-Dateisystem“ implementiert, ist eigentlich eine ziemlich komplizierte Frage, daher überlasse ich es interessierten Lesern, darüber nachzudenken. Hier müssen wir nur verstehen, dass das Konzept der Ebenen durch ein Union-Dateisystem implementiert wird. Hier ist ein Beispiel einer „Ebene“ für ein MySQL-Basisimage: [root@VM-0-14-centos ~]# Docker-Image prüfen docker.io/mysql [ { "ID": "sha256:db2b37ec6181ee1f367363432f841bf3819d4a9f61d26e42ac16e5bd7ff2ec18", "RepoTags": [ „docker.io/mysql:neueste“ ], ...... "RootFS": { "Typ": "Ebenen", "Ebenen": [ "sha256:d0fe97fa8b8cefdffcef1d62b65aba51a6c87b6679628a2b50fc6a7a579f764c", "sha256:329fe06a30f03f9131ce8d9db2e8a9f725b18efe3457d6f015e1c4d8a3f41a0a", "sha256:ec8c80284c72bcf47ffedc0dde4d5792de761d52f974c30d37d52b9ac00e8a2a", „sha256:9dae2565e824235798981525d6ff9114817b7139c073e0d216b00ae9e58f74d0“, "sha256:36b89ee4c647b9c21de8b5476b4922efc873aba69705c169e1a3edcf9128679b", "sha256:c21e35e55228365b268f57fac382a6e991db216cb03d9b7079496f5498956ab0", "sha256:15b463db445cb750fa6bc908a41fd18e38c4d2a02a978b66beb598c4f3f57b95", "sha256:7832ac00d41eda3a773a18408dea0b8e05ddbdd3a1e94afef3b6e3dc6444b7bb", "sha256:7f893b7c04ac2f939737d2da4e15af796c7acc0fd10c2951d9ae5bf33ceec2dc", "sha256:060fef62a228fff7e9dc3b7008bc9089e642ef29dc699f7e90c36ced5b2e75c6", "sha256:af6e790b82373cc65ca73efe5cc8945731525a9dcae6deeea2a5a5802561a72a", „sha256:9b0377a95c0e0bd5aa5b220449d17333faaa0e2bd7e8b93565beeadbf3906646“ ] } } ] Wie Sie sehen, ist RootFS das Dateisystem des Containers und Layers die „Schicht“. Aus welchen Ebenen besteht also ein Docker-Container-Image? ? ? Je nach Funktion wird es hauptsächlich in eine schreibgeschützte Ebene, eine Initialisierungsebene und eine Lese-/Schreibebene unterteilt. Schreibgeschützte Ebene: Schreibgeschützte Ebenen werden schreibgeschützt bereitgestellt. Diese Ebenen stellen einen Teil des Betriebssystems inkrementell bereit. Lese-/Schreibebene: Es handelt sich um die oberste Ebene des Images und sein Mount-Modus ist Lesen/Schreiben. Vor dem Schreiben von Dateien ist dieses Verzeichnis leer. Sobald ein Schreibvorgang im Container ausgeführt wird, wird der von Ihnen geänderte Inhalt inkrementell in dieser Ebene angezeigt. Init-Ebene: Die Init-Schicht ist eine speziell von Docker generierte interne Schicht, die hauptsächlich Dateien wie /etc/hosts und /etc/resolv.conf speichert. Der Grund für die Speicherung dieser spezifischen Dateien besteht darin, dass diese Dateien ursprünglich Teil des Betriebssystems sind, aber die Anwendung des Benutzers diese Dateien häufig ändert. Diese Änderungen sind nur für den aktuellen Container gültig. Wir möchten nicht, dass diese Änderungen zusammen mit der Lese-/Schreibebene übermittelt werden, wenn Docker Commits durchführt. Einige Anmerkungen: 1. Wenn der Benutzer ein Docker-Commit ausführt, wird nur der Inhalt der Lese-/Schreibebene festgeschrieben. 2. Wenn wir eine schreibgeschützte Layer-Datei a.txt löschen möchten, müssen wir nur eine Datei mit demselben Namen .wh.a.txt in die Lese-/Schreibebene schreiben. Auf diese Weise wird die a.txt-Datei durch die .wh.a.txt-Datei verdeckt, wodurch der Löschzweck erreicht wird. 03 Vorteile des SchichtdesignsDurch das geschichtete Design und inkrementelle Datenoperationen ist der jedes Mal abgerufene und geänderte Inhalt kleiner als der eines vollständigen Betriebssystems. Durch die gemeinsame Nutzung der zugrunde liegenden schreibgeschützten Ebene ist der von mehreren Container-Images insgesamt genutzte Speicherplatz kleiner als die Summe der einzelnen Container-Images. Gleichzeitig kann die Teamzusammenarbeit auf Basis von Container-Images Menschen aus unterschiedlichen Unternehmen und Bereichen miteinander verbinden und neue Funktionen schneller iterieren. Oben finden Sie eine ausführliche Erläuterung des Konzepts der Docker-Containerebenen. Weitere Informationen zu Docker-Containerebenen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Forschung zur Größe von Webseiten
>>: CSS-Randüberlappungen und wie man sie verhindert
■ Planung des Website-Themas Achten Sie darauf, da...
Gestern wollte ich a:visited verwenden, um die Fa...
html,Adresse, Blockzitat, Körper, dd, div, dl,dt,...
In diesem Artikelbeispiel wird der spezifische Co...
In diesem Artikel wird der spezifische Code von B...
Ich habe diesen Blog geschrieben, um mich daran z...
Ich habe meinen Raspberry Pi-Server vor zwei Tage...
Code kopieren Der Code lautet wie folgt: <fram...
Vorteile der Verwendung von xshell zur Verbindung...
Inhaltsverzeichnis 1. Beispiel: Hiermit können Da...
Inhaltsverzeichnis Produktanforderungen Ideen Pro...
Inhaltsverzeichnis 1. Einleitung 2. Vorbereitung ...
Detaillierte Erklärung der tinyMCE-Verwendung Ini...
Beim Produktdesign legen Designer Wert darauf, das...
Beim Styling unserer Webseiten haben wir die Wahl...