Detaillierte Erläuterung des Konzepts der Docker-Containerebenen

Detaillierte Erläuterung des Konzepts der Docker-Containerebenen

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älterkonsistenz

Das 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 Schichtdesigns

Durch 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:
  • Detaillierte Erklärung des Prinzips der Docker-Image-Schichtung
  • Detaillierte Erläuterung der Anwendung der Docker-Basistechnologie Namespace Cgroup
  • Eine kurze Analyse der Überlegungen zur Docker-Image-Schichtung

<<:  Forschung zur Größe von Webseiten

>>:  CSS-Randüberlappungen und wie man sie verhindert

Artikel empfehlen

Zusammenfassung der Erfahrungen und Fähigkeiten im Webdesign

■ Planung des Website-Themas Achten Sie darauf, da...

CSS: besuchte geheime Erinnerungen des Pseudoklassenselektors

Gestern wollte ich a:visited verwenden, um die Fa...

Standard-CSS-Stil der XHTML-Sprache

html,Adresse, Blockzitat, Körper, dd, div, dl,dt,...

mysql installer web community 5.7.21.0.msi grafik-tutorial zur installation

In diesem Artikelbeispiel wird der spezifische Co...

Bootstrap realisiert den Karusselleffekt

In diesem Artikel wird der spezifische Code von B...

Tipps zur Verwendung von Frameset zum Zentrieren des Breitbilds

Code kopieren Der Code lautet wie folgt: <fram...

Verwenden Sie xshell, um eine Verbindung zum Linux-Server herzustellen

Vorteile der Verwendung von xshell zur Verbindung...

Der Quellcode zeigt, warum Vue2 Daten und Methoden direkt abrufen kann

Inhaltsverzeichnis 1. Beispiel: Hiermit können Da...

Node-Skript realisiert automatische Anmelde- und Lotteriefunktion

Inhaltsverzeichnis 1. Einleitung 2. Vorbereitung ...

Detaillierte Erklärung der Verwendung und Erfahrung mit tinyMCE

Detaillierte Erklärung der tinyMCE-Verwendung Ini...

Wird CSS3 SCSS wirklich ersetzen?

Beim Styling unserer Webseiten haben wir die Wahl...