Dieser Artikel vermittelt Ihnen relevantes Wissen über das gemeinsame Dateisystem und ein mehrschichtiges Verständnis der Docker-Spiegelungsprinzipien, einschließlich Fragen im Zusammenhang mit gemeinsamen Dateisystemen, hierarchischen Strukturen und mehrschichtigen Praktiken.
UnionFS (Union File System)
UnionFS (Union File System): Union File System (UnionFS) Es ist ein mehrschichtiges, leichtes und leistungsstarkes Dateisystem, das Schicht für Schicht als einzelne Übermittlung überlagert werden kann. Gleichzeitig können verschiedene Verzeichnisse in dasselbe virtuelle Dateisystem eingebunden werden ein einzelnes virtuelles Dateisystem). Das Union-Dateisystem ist die Basis von Docker-Images. Bilder können durch Layering vererbt werden. Basierend auf dem Basisbild (ohne übergeordnetes Bild) können verschiedene spezifische Anwendungsbilder erstellt werden.
Darüber hinaus können verschiedene Docker-Container einige grundlegende Dateisystemschichten gemeinsam nutzen und gleichzeitig ihre eigenen einzigartigen Änderungsschichten hinzufügen, was die Speichereffizienz erheblich verbessert.
Das in Docker verwendete AUFS (AnotherUnionFS) ist ein Union-Dateisystem. AUFS unterstützt das Festlegen von schreibgeschützten, schreibgeschützten und Whiteout-Berechtigungen für jedes Mitgliedsverzeichnis (ähnlich einem Git-Zweig). Gleichzeitig verfügt AUFS über ein Konzept, das Hierarchien ähnelt. Nur-Lese-Berechtigungen können logisch inkrementell geändert werden (ohne Auswirkungen). der schreibgeschützte Teil).
Docker unterstützt derzeit gemeinsame Dateisystemtypen, einschließlich AUFS, btrfs, vfs und DeviceMapper.
Funktionen: Laden Sie mehrere Dateisysteme gleichzeitig, aber von außen ist nur ein Dateisystem sichtbar. Beim gemeinsamen Laden wird jede Ebene von Dateisystemen überlagert, sodass das endgültige Dateisystem alle zugrunde liegenden Dateien und Verzeichnisse enthält. .
Basis-Image
Basis-Image bedeutet einfach, dass es nicht auf einem anderen Image basiert und vollständig darauf aufgebaut ist. Es kann mit dem Fundament eines Gebäudes und dem Urheber verglichen werden von Docker-Bildern.
Basisbild hat zwei Bedeutungen: (1) Es ist nicht von anderen Bildern abhängig und wird von Grund auf neu erstellt. (2) Andere Bilder können darauf basierend erweitert werden.
Was man also als Basis-Image bezeichnen kann, sind normalerweise Docker-Images verschiedener Linux-Distributionen wie Ubuntu, Debian, CentOS usw.
Prinzip des Ladens von Docker-Images
Das Image von Docker besteht tatsächlich aus einer Schicht von Dateisystemen, und diese Schicht des Dateisystems ist UnionFS.
Typisches Linux erfordert zum Starten und Ausführen zwei FSs, bootfs + rootfs:
bootfs (Boot-Dateisystem) umfasst hauptsächlich Bpotloader und Kernel. Linux lädt beim ersten Mal das Bootfs-Dateisystem startet, am unteren Rand des Docker-Images befindet sich bootfs. Diese Schicht ist die gleiche wie bei unserem typischen Linux/Unix-System, einschließlich des Bootloaders Bootloader und des Kernel-Kernels. Wenn das Booten abgeschlossen ist, befindet sich der gesamte Kernel im Speicher. Zu diesem Zeitpunkt wurde das Recht zur Nutzung des Speichers von bootfs auf den Kernel übertragen. Zu diesem Zeitpunkt deinstalliert das System auch bootfs.
rootfs (Root-Dateisystem), zusätzlich zu bootfs. Enthält Standardverzeichnisse und -dateien wie /dev, /proc, /bin, /etc usw. in typischen Linux-Systemen. Roots sind verschiedene Betriebssystemdistributionen wie Ubuntu, Centos usw.
Warum gibt es im Docker-Image keinen Kernel?
In Bezug auf die Bildgröße ist ein relativ kleines Image nur etwas mehr als 1 KB oder ein paar MB groß, während die Kerneldatei Dutzende MB benötigt, also keinen Kernel im Image Nach dem Start als Container wird der Kernel des Hosts direkt verwendet, und das Image selbst stellt nur die entsprechenden Rootfs bereit, bei denen es sich um das für den normalen Betrieb des Systems erforderliche User-Space-Dateisystem handelt /dev/, /proc, /bin, /etc Verzeichnis, daher gibt es grundsätzlich kein /boot-Verzeichnis im Container und /boot speichert Dateien und Verzeichnisse, die sich auf den Kernel beziehen.
Da der Start- und Ausführungsprozess des Containers direkt den Kernel des Hosts verwendet, ruft er die physische Hardware nicht direkt auf, sodass keine Hardwaretreiber beteiligt sind, sodass der Kernel und die Treiber nicht verwendet werden. Und wenn es um die Technologie virtueller Maschinen geht, verfügt jede virtuelle Maschine über einen eigenen unabhängigen Kernel Das Docker-Image wird auch in Schichten heruntergeladen. Nehmen Sie als Beispiel das Herunterladen des Redis-Images:
Sie können sehen, dass das neue Image Schicht für Schicht aus dem Basis-Image generiert wird. Jedes Mal, wenn Sie eine Software installieren, fügen Sie dem vorhandenen Image eine Ebene hinzu.Warum übernimmt das Docker-Image diese Schichtstruktur?
Der größte Vorteil ist die gemeinsame Nutzung von Ressourcen. Wenn beispielsweise mehrere Images aus demselben Basisimage erstellt werden, muss der Host nur ein Basisimage auf der Festplatte behalten und nur ein Basisimage in den Speicher laden, damit es alle Container bedienen kann. und jede Ebene des Bildes kann geteilt werden.
Beschreibbare Containerebene
Docker-Bilder sind schreibgeschützt. Wenn der Container startet, wird eine neue beschreibbare Ebene über das Bild geladen.
Diese neue Ebene ist die beschreibbare Containerebene, und alles unter dem Container wird als Spiegelebene bezeichnet.
Docker verwendet eine Copy-on-Write-Strategie, um die Sicherheit des Basisimages sowie eine höhere Leistung und Speicherplatznutzung zu gewährleisten.
Beginnen Sie mit der Suche nach unten und lesen Sie sie in den Speicher ein. Wenn sie sich bereits im Speicher befindet, können Sie sie direkt verwenden. Mit anderen Worten: Docker-Container, die auf demselben Computer ausgeführt werden, nutzen zur Laufzeit dieselben Dateien.
Suchen Sie von oben nach unten, suchen Sie sie und kopieren Sie sie in die Containerebene. Für den Container können Sie die Datei in der Containerebene sehen, aber nicht die Datei in Bildebene und ändern Sie dann die Dateien direkt auf der Containerebene.
Suchen Sie von oben nach unten und zeichnen Sie den Löschvorgang im Container auf. Es handelt sich nicht um einen echten Löschvorgang, sondern um einen sanften Löschvorgang. Dadurch wird die Bildgröße nur vergrößert, nicht verringert.
Fügen Sie diese direkt zur obersten beschreibbaren Ebene des Containers hinzu, ohne die Bildebene zu beeinträchtigen.
Alle Änderungen am Container, egal ob das Hinzufügen, Löschen oder Ändern von Dateien, erfolgen nur in der Containerebene. Nur die Containerebene ist beschreibbar und alle Bildebenen unterhalb der Containerebene sind schreibgeschützt, sodass das Bild von mehreren Containern gemeinsam genutzt werden kann.
Erstellen Sie einen Container durch das Bild, bedienen Sie dann die Containerebene, lassen Sie die Bildebene unverändert und packen Sie dann die bearbeitete Containerebene und die Bildebene zur Übermittlung in ein neues Bild.
Docker-Commit: Erstellen Sie ein neues Image mit einem Container.
Syntax:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS-Beschreibung:
Verwendungsbeispiel: Erstellen Sie einen Container über ein Bild, bedienen Sie dann die Containerebene und packen Sie dann die betriebene Containerebene und die Bildebene zur Übermittlung in ein neues Bild.
1. Laden Sie zuerst das Tomcat-Image herunter und führen Sie es aus:
docker run -d --name="tomcat01" tomcat
3. Kopieren Sie die Dateien in das Verzeichnis webapps.dist des Tomcat-Containers im Webapps-Verzeichnis:
docker exec -it tomcat01 /bin/bash
5. Docker-Commit Senden Sie das Bild
Speichern Sie den Container dc904437d987 als neues Bild und fügen Sie die Übermittlerinformationen und Beschreibungsinformationen hinzu 1.0:
cp -r webapps.dist/* webapps
Docker-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonDocker-Image-Prinzip: gemeinsames Dateisystem und mehrschichtiges Verständnis (detaillierte Beispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!