Detaillierte Einführung in den Docker -Speicherfahrer
Ich habe kürzlich an einem Projekt gearbeitet und wusste nicht, wie man den Docker -Speichertreiber in diesem Zeitraum benutzt. Deshalb habe ich online nach Informationen gesucht und ihn gelöst. Ich werde es hier aufnehmen.
Zweck
Docker ist eine Open -Source -Anwendungscontainer -Engine, die hauptsächlich den Linux -Kernel -Namespace verwendet, um die Sandbox -Isolation zu erreichen, und CGroup verwendet, um eine Ressourcenbeschränkung zu erreichen. Docker ist ein leichter Linux -Container, der für einheitliche Entwicklung und Bereitstellung verwendet wird, und versucht, das Problem der "Abhängigkeitshölle" zu lösen, abhängige Dienste und Komponenten zu kombinieren, ähnlich wie von Schiffen verwendete Container und eine schnelle Installation und Bereitstellung.
1. Die grundlegende Architektur von Docker - Kunde und Daemon
Lassen Sie uns zunächst den grundlegenden Architektur und den Startprozess von Docker verstehen. Tatsächlich nimmt Docker eine C/S -Architektur an, einschließlich Client und Server. Docker Daemon akzeptiert Anfragen von Kunden als Server und verarbeitet diese Anfragen (erstellen, ausführen, Container senden). Der Client und der Server kommunizieren über die erholsame API auf derselben Maschine. Im spezifischen Verwendungsvorgang wird nach der Ausführung des Dienstes Docker Start der Docker Deamon Daemon -Prozess auf dem Host generiert, im Hintergrund ausgeführt und auf das Empfangen von Nachrichten vom Client (d. H. Eingabetaste Docker -Befehle wie Docker Pull XXX, Docker Run…, Docker Commit xxx) ausgeführt, um die Interaktion mit Docker Deamon zu erreichen. Nach dem Start des Docker -Dienstes können Sie den Docker -Prozess sehen.
Standard
[root@localhost ~]# ps -aux | Grep Dockerroot 11701 0,0 0,4 359208 16624? SSL 21:05 0:00/usr/bin/docker -d -h fd: // ---selinux -fabellose -Insecure -Registry 186.100.8.216:5000root 11861 0.0 0.0 113004 2256 PTS/0 S+ 23:01 0:00 GREP -CODROR = AUTOODOCKER = AUTOODREKER
Dies liegt hauptsächlich daran, dass Sie bei späterer Angabe des Dateisystems den spezifischen Speicher -Treiber in/etc/sysconfig/docker konfigurieren müssen (dies schreibt ein spezielles Blog) und dann Docker Daemon starten und nicht über die Parameter des Befehls ausführen können. Sie können es auch direkt über die Host -Befehlszeile über Docker D festlegen.
2. Docker -Speichermethode - Speicherfahrer
Der Kernteil des Docker -Modells besteht darin, den hierarchischen Spiegelmechanismus effektiv zu nutzen. Der Spiegel kann durch Hierarchie vererbt werden. Basierend auf dem Basisbild (ohne übergeordnetes Bild) können verschiedene spezifische Anwendungsbilder gemacht werden. Verschiedene Docker -Container können einige grundlegende Dateisystemebenen teilen und gleichzeitig mit ihren eigenen einzigartigen Änderungsschichten verbunden und die Speicherungseffizienz erheblich verbessert. Der Hauptmechanismus besteht darin, hierarchisches Modell zu modellieren und unterschiedliche Verzeichnisse in demselben virtuellen Dateisystem zu montieren (vereinen Sie mehrere Verzeichnisse in einem einzigen virtuellen Dateisystem aus diesem Artikel). Für Spiegelspeicherdocker werden verschiedene Speicherfahrer verwendet, darunter: AUFS, Devicemapper, BTRFS und Overlay (von der offiziellen Website). Das Folgende ist eine kurze Einführung in verschiedene Speicherfahrer.
Aufs
AUFS (otherUnionfs) ist ein gemeinsames Dateisystem. AUFs unterstützt das Einstellen von Readonly-, Readwrite- und Whiteout-möglicher Berechtigungen für jedes Mitgliedsverzeichnis (ähnlich wie Git). Gleichzeitig gibt es in AUFs ein ähnliches Konzept, bei dem Zweige mit schreibgeschützten Berechtigungen logisch inkrementell modifiziert werden können (die sich nicht auf den schreibgeschützten Teil auswirken). Der einzige Speicher von AUFS kann die Freigabe von ausführbaren und gemeinsam genutzbaren Laufzeitbibliotheken zwischen Containern erkennen. Wenn Sie also Hunderte von Laufzeiten mit demselben Programmcode oder Laufzeitbibliotheken ausführen, ist AUF eine sehr gute Wahl.
Geräte -Mapper
Device Mapper ist ein Mapping -Framework -Mechanismus von logischen Geräten bis hin zu physischen Geräten, die im Linux 2.6 -Kernel bereitgestellt werden. Unter diesem Mechanismus können Benutzer Managementstrategien für die Implementierung von Speicherressourcen entsprechend ihren Anforderungen problemlos formulieren (siehe Details). Der Device Mapper -Treiber erstellt eine 100G -einfache Datei mit Ihren Bildern und Containern. Jeder Container ist auf ein Volumen von 10 g Größe beschränkt (Hinweis: Dies ist eine spärliche Datei, die automatisch mit Loopback erstellt wurde, insbesondere Daten und Metadaten unter/var/lib/docker/devicemapper/devicemapper, was dynamisch erweitert werden kann). Sie können die Größe des Docker -Containers als spezifische Referenz anpassen) mit dem Parameter -S, um den Treiber beim Starten des Docker -Daemons anzugeben. Schließen Sie zuerst den Docker -Dienst und führen Sie den Befehl aus:
Standard
[root@localhost ~]# docker -d -s devicemapperInfo [0000] +Job serveapi (unix: //var/run/docker.sock) info [0000] Hören Sie auf http auf unix (/var/run/docker.sock) info [0000] +Job initiver () Inithiver () initiver (). (0) Info [0000] Ladecontainer: Start. .... info [0000] Container laden: fertig. Info [0000] Docker -Daemon: 1.4.0 4595D4F/1.4.0; ExecDriver: Native-0,2; GraphDriver: Devicemapper Info [0000] +Job AcceptConnections () Info [0000] -Job AcceptConnections () = OK (0)
Darüber hinaus kann Docker beim Starten des Containers den Parameter Speicheroptum angeben, aber jetzt kann nur Devicemapper Parametereinstellungen akzeptieren. Später werden zielgerichtete Blog -Anzeigen angezeigt.
Btrfs
Der BTRFS -Treiber kann bei Docker Build sehr effizient sein. Wie Devicemapper unterstützt es jedoch keinen gemeinsam genutzten Speicher zwischen Geräten (Teilnahme an der offiziellen Website). BTRFS unterstützt Schnappschüsse und Klone und kann auch mehrere physische Geräte problemlos verwalten. (Weitere Informationen finden Sie in der Einführung von IBM zu BTRFS)
Overlay
Overlay ist AUFS sehr ähnlich, aber seine Leistung ist besser als AUFs und hat eine gute Speicherauslastung. Es wurde jetzt zu Linux Kernel 3.18 zusammengeführt. Spezifischer Verwendungsbefehl: Docker DS Overlay
Hinweis auf der offiziellen Website: Derzeit ist sie auf BTRFS oder einer Kopie auf dem Schreibdateisystem nicht unterstützt und sollte nur über Ext4 -Partitionen verwendet werden.
3 Docker -Verzeichnisstruktur
Die beiden wichtigsten Konzepte von Docker sind Spiegel und Behälter. Wo ist das Bild, das wir abziehen, gespeichert? Wo ist der Inhalt unserer Operation geändert, nachdem der Spiegel -Lauf -Container begonnen wurde? Da die spezifischen Treiber unterschiedlich sind, ist der endgültige Implementierungseffekt unterschiedlich. Analysieren wir die Speicherstruktur von Docker mit einem Beispiel für den Geräte -Mapper -Speicher -Treiber.
1. Geben Sie das Verzeichnis/var/lib/docker ein und listen Sie den Inhalt auf:
Standard
[root@localhost ~]# cd/var/lib/docker/[root@localhost docker]# lscontainers devicemapper execriver graph init linkgraph.db repositories-devicemapper tmp Trust Volumes
Nach dem Inhalt des Verzeichnisses ist es offensichtlich, dass der Devicemapper -Treiber verwendet wird.
Hinweis: Die unten angegebenen Ordner sind alle unter/var/lib/docker.
2. Welcher Ordner existiert die Pull -Bilddatei? (Siehe)
Die Bildinformationen von Pull werden im Graphordner gespeichert, und der Inhalt des Bildes ist unter devicemapper/ devicemapper/ Daten vorhanden.
3. Wo fährt der gestartete Container?
Die gestarteten Containerkonfigurationsinformationen werden in Containern gespeichert und auch der ExecDriver/ nativ/ wird auch angezeigt.
Der Inhalt des Betriebs im Container wird unter Devicemapper/Devicemapper/Daten gespeichert.
4. Die Rolle der Grafik
In der Docker -Architektur spielt es den Verwalter des heruntergeladenen Containerbildes und den Rekorder der Beziehung zwischen dem heruntergeladenen Containerbild. Im lokalen Verzeichnis der Grafik sind die spezifischen Informationen, die für jedes Containerbild gespeichert sind, die Metadaten (JSON) des Containerbildes, die Layersize -Informationen (Layersize -Informationen) des Containerbildes und die spezifischen RootFs, die vom Containerbild dargestellt werden.
5. Experimenteller Test:
- Anfangs ist kein Container aktiviert:
Standard
[root@localhost docker]# ll Container/Gesamt 0
- Starten Sie einen Container:
Standard
[root@localhost docker]# docker run -i -t - -rm Centos: 7 /bin /bash [root@187a8f9d2865 /]#
Die UUID des gestarteten Containers = 187A8F9D2865
- Überprüfen Sie vor Beginn des Containers die tatsächliche Größe der Datei unter/var/lib/docker/devicemapper/devicemapper/
Standard
[root@bhdocker216 docker]# du -h devicemapper/devicemapper/*2.1g devicemapper/devicemapper/data3.5m devicemapper/devicemapper/metadata
- Host anzeigen
Standard
[root@bhdocker216 docker]# ls container/187a8f9d2865c2ac *** 91b981
Überprüfen Sie den Inhalt des gestarteten Containers unter dem UUID -Ordner:
Standard
[root@bhdocker216 Container]# LL 187A8F9D2865C2AC *** 91B981TOTAL 24-RW -----. 1 Wurzelwurzel 273 März 5 23:59 187A8F9D2865 ***-JSON.Log-RW-R--. 1 Root Root 1683 5. März 23:58 config.json-rw-r--. 1 Root Root 334 5. März 23:58 Hostconfig.json-rw-r--. 1 Root Root 13. März 5 23:58 Hostname-RW-R--. 1 Root Root 174 5. März 23:58 Hosts-RW-R--. 1 Root Root 69 März 5 23:58 Auflösen.Conf- Fügen Sie die Datei in den Startcontainer hinzu und sehen Sie sie sich an.
Erstellen Sie zuerst eine Datei im ausführlichen Container:
Standard
[root@8a1e3ad05d9e/]# dd if =/dev/null von = floppy.img bs = 512 count = 57605760+0 Datensätze in5760+0 Aufzeichnungen Out2949120 Bytes (2,9 MB) kopiert, 0.0126794 S, 233 mb/s
Zeigen Sie dann die Datei unter/var/lib/docker/devicemapper/devicemapper an/:
Standard
[root@bhdocker216 docker]# du -h devicemapper/devicemapper/*5.5g devicemapper/devicemapper/data4.6m devicemapper/devicemapper/metadata
Die Größe dieses Ortes ist etwas anders, da ich zuerst #DD if =/dev/null von = test.txt bs = 1m count = 8000 ausgeführt habe, um eine 8G-Größe zu erstellen. Ich habe es beendet, weil es zu langsam war, aber ich kann deutlich sehen, dass sich beide Ordner beim Betrieb im laufenden Container geändert haben (hinzugefügt).
- Überprüfen Sie die Grafik. Wenn nur ein Bild (Ubuntu14.10) gezogen wird, erscheinen 7 lange UUID -genannte Verzeichnisse. Wie kam das zustande?
Verwenden Sie Docker Images Tree, um die Struktur der Spiegelbaum aufzulisten, und wir können die hierarchische Speicherstruktur des Spiegels sehen. Das endgültige Ubuntu (Layer 7) basiert auf Schicht 6 Änderungen, dh der N-ten-Schicht in diesem logischen Baum basiert auf den N-1-Änderungen, und die N-Schicht hängt vom N-1-Bild ab. Die 0. Schicht, Größe ist 0, wird als Basisbild bezeichnet.
- Was ist der Inhalt im Graph/UUID -Verzeichnis?
Standard
[root@localhost Graph]# LL 01BF15A18638145EB *** -HTOTAL 8.0K-RW -----. 1 Root Root 1.6K 5. März 18:02 JSON-RW -----. 1 Wurzelwurzel 9. März 18.02
Sehen Sie sich den Inhalt der Ebene an: die Größe der digitalen Darstellungsschicht (Einheit: b). JOSN: Speichern Sie die Metadaten dieses Bildes (z. B. Größe, Architektur, Konfiguration, Container, uUid ** usw.).
- Ansicht Devicemapper/Devicemapper Ordner
Es gibt zwei Ordner, Daten und Metadaten. Tatsächlich speichert der Gerätem Mapper -Treiber sowohl die Spiegel- als auch die Containerdateien in der Datei ** Data **. Sie können die Größe von Daten und Metadaten über Docker -Informationen anzeigen. Zusätzlich können Sie Du H (oben verwendet) verwenden, um die tatsächlichen Größen dieser beiden spärlichen Dateien anzuzeigen.
- Execriver
Standard
[root@bhdocker216 docker]# ls execriver/nativ/8A1E3AD05D9E66A455E683A2C *** 2437BDCCCDFDFA // den Inhalt im Inneren anzeigen: [root@bhdocker216 8A1E3AD05D9E66ATRIERT.
- Volumes
Volumen ohne den Parameter -v sind leer. Wenn der Container nach dem Testen den Parameter -V hinzufügen, wird im Ordner des Volumens ein UUID angezeigt. Eine globale Suche wird am Host durchgeführt und nur unter Bänden gefunden. Es hat nichts mit dem Bild und dem Uuid des Behälters zu tun.
Standard
[root@bhdocker216 docker]# find/-name 86eb77f9f5e25676f100 *** D5a/var/lib/docker/volumes/86eb777f9f5e25676f100 *** D5A // Ansicht des Inhalt 86EB77F9F5E25676F100 *** d5aconfig.json [root@bhdocker216 Volumes]# Cat 86EB77F9F5E25676F100 *** D5A /CONfig.json {"ID": "86EB77F9F5E25676F100A89BA727BC15185303236AAE0DCF4C17223E37651D5A", "Pfad": "/Home/Data", " Tabelle Beschreibung der Ordnerfunktion
Machen Sie eine Zusammenfassung, organisieren Sie eine Tabelle und erläutern Sie die Funktionen verschiedener Ordner unter/var/lib/docker:
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!