Vorne geschriebenIm vorherigen Artikel haben wir etwas über Containernetzwerke gelernt und eine relativ detaillierte Einführung in das Funktionsprinzip der Container Network Driver Bridge gegeben. Heute werfen wir einen Blick auf einen weiteren Schlüsselbereich im Container – den Speicher. Containerlagerung kann in zwei Kategorien unterteilt werden: Eines davon bezieht sich auf das Image, nämlich die Copy-On-Write-Funktion auf Containerebene, die im Artikel „Grundlagen der Docker-Container-Technologie: Union File System OverlayFS“ erwähnt wird. Standardmäßig werden alle in einem Container erstellten Dateien auf einer beschreibbaren Containerebene gespeichert. Diese Methode, Dateien direkt auf der Containerebene zu speichern, erschwert das Speichern und Teilen von Daten. Aufgrund der Abhängigkeit von Speichertreibern verringert diese zusätzliche Abstraktion die Leistung im Vergleich zur Verwendung von Datenvolumes, die direkt in das Hostdateisystem schreiben. Der andere ist der Host-Speicher, der dazu dient, das Host-Verzeichnis zur Verwendung an den Container zu binden oder bereitzustellen, sodass die Daten auch nach dem Stoppen des Containers bestehen bleiben. In diesem kurzen Aufsatz geht es hauptsächlich um Letzteres. Mehrere SpeichermontagemethodenHier zeichnen wir das folgende Diagramm basierend auf den verschiedenen Speicherorten der Daten auf dem Docker-Host: 1.Bind-HalterungenBind-Mounts haben im Vergleich zu Volumes eine eingeschränkte Funktionalität. Bei Verwendung eines Bind-Mounts wird eine Datei oder ein Verzeichnis auf dem Host in den Container gemountet. Auf eine Datei oder ein Verzeichnis wird über den vollständigen Pfad auf dem Hostcomputer verwiesen. Das Verzeichnis muss nicht bereits auf dem Docker-Host vorhanden sein. Wenn es nicht existiert, erstellt Docker es für uns. Bitte beachten Sie, dass nur Verzeichnisse automatisch erstellt werden können. Lassen Sie uns mit der Option -v ein Verzeichnis /nginx/html an den Container anbinden. docker run -dt -v /nginx/html:/usr/share/nginx/html --name nginx nginx Zeigen Sie das Container-Mounts-Feld über Docker Inspect Nginx an. "Reittiere": [ { "Typ": "binden", "Quelle": "/nginx/html", "Ziel": "/usr/share/nginx/html", "Modus": "", "RW": wahr, "Ausbreitung": "rprivate" } ], Als nächstes erstellen wir eine index.html auf dem Docker-Host und schreiben „Hallo nginx“. Dann greifen wir auf die Container-IP zu. Offensichtlich ist unsere Einbindung wirksam geworden. [root@localhost ~]# echo "hallo nginx" > /nginx/html/index.html [root@localhost ~]# curl 172.17.0.4 hallo nginx Hier gibt es ein Problem. Wir können Dateien über den Docker-Host ändern, damit die Dateien im Container wirksam werden. Umgekehrt kann der Container den Inhalt im Host-Dateisystem ändern, erstellen und löschen. Um dieses Problem zu lösen, können wir beim Erstellen des Containers die Berechtigungen des Mount-Verzeichnisses konfigurieren, beispielsweise die folgenden schreibgeschützten Berechtigungen: docker run -dt -v /nginx/html:/usr/share/nginx/html:ro --name nginx nginx Wenn Sie also Bind Mount verwenden und das Host-Dateisystem bedienen, müssen Sie Folgendes beachten:
2. BändeVolume-Speichervolumes werden von Docker erstellt und verwaltet. Wir können Volumes explizit mit dem Befehl „Docker Volume Create“ erstellen oder Volumes erstellen, wenn der Container erstellt wird. [root@localhost ~]# Docker-Volume erstellen nginx_volume nginx_volume [root@localhost-Volumes]# docker inspect nginx_volume [ { "Erstellt am": "2021-08-12T01:58:04-04:00", "Treiber": "lokal", "Beschriftungen": {}, "Einhängepunkt": "/var/lib/docker/volumes/nginx_volume/_data", "Name": "nginx_volume", "Optionen": {}, "Geltungsbereich": "lokal" } ] Sie können sehen, dass sich der Einhängepunkt im Stammverzeichnis von Docker /var/lib/docker/volumes befindet. Löschen Sie einzelne oder alle ungenutzten Volumes mit Docker Volume RM/Prune. Die Möglichkeit, Volumes mit Docker-Befehlen zu verwalten, ist gegenüber Bind Mounts ein Vorteil. [root@localhost ~]# Docker-Volume ls TREIBERVOLUMENNAME lokale owncloud-docker-server_files lokaler owncloud-docker-server_mysql lokaler owncloud-docker-server_redis [root@localhost ~]# Docker-Volume bereinigen WARNUNG! Dadurch werden alle lokalen Volumes entfernt, die nicht von mindestens einem Container verwendet werden. Möchten Sie wirklich fortfahren? [j/N] j Gelöschte Bände: owncloud-docker-server_files owncloud-docker-server_mysql owncloud-docker-server_redis Insgesamt zurückgewonnener Speicherplatz: 199,4 MB Wenn beim Erstellen eines Containers die Quelle der Container-Einbindung nicht angegeben wird, erstellt Docker automatisch ein anonymes Volume für uns, das sich ebenfalls im Docker-Stammverzeichnis befindet. [root@localhost-Volumes]# docker run -dt -v /usr/share/nginx/html --name nginx_with_volume nginx d25bdfce9c7ac7bde5ae35067f6d9cf9f0cd2c9cbea6d1bbd7127b3949ef5ac6 [root@localhost-Volumes]# Docker-Volume ls TREIBERVOLUMENNAME lokal d8e943f57d17a255f8a4ac3ecbd6471a735aa64cc7a606c52f61319a6c754980 lokales nginx_volume [root@localhost-Volumes]# ls /var/lib/docker/volumes/ backingFsBlockDev d8e943f57d17a255f8a4ac3ecbd6471a735aa64cc7a606c52f61319a6c754980 metadata.db nginx_volume Wenn wir ein gemountetes Volume erstellen, ist der Speicher mit Bind-Mounts konsistent. Wenn der Docker-Host jedoch eine bestimmte Verzeichnis- oder Dateistruktur nicht garantieren kann, kann uns das Volume dabei helfen, die Konfiguration des Docker-Hosts von der Container-Laufzeit zu trennen. Wenn wir Daten von einem Docker-Host auf einen anderen sichern, wiederherstellen oder migrieren müssen, sind Volumes daher sehr praktisch und können von den Einschränkungen des Hostpfads befreit werden. Bei der Verwendung von Bind-Mounts und -Volumes müssen wir die folgenden Propagation-Overlay-Prinzipien beachten: Beim Mounten eines leeren Datenträgers: Der Inhalt des Verzeichnisses im Container wird auf den Datenträger übertragen (kopiert). Beim Bind-Mounting oder bei nicht leeren Volumes: Der Inhalt des Verzeichnisses innerhalb des Containers wird durch das Volume oder das gebundene Host-Verzeichnis überschrieben. 3.tmpfs-Mounttmpfs-Mounts sind nur auf Linux-Hosts verfügbar. Wenn wir einen Container mit einem tmpfs-Mount erstellen, kann der Container Dateien außerhalb der beschreibbaren Ebene des Containers erstellen. Behalten Sie die Daten im Speicher. Wenn der Container stoppt, werden auch die geschriebenen Daten entfernt. Wird hauptsächlich für die temporäre Speicherung vertraulicher Dateien verwendet, die nicht auf der beschreibbaren Ebene des Hosts oder Containers verbleiben sollen. Mounten Sie einen Speicherblock mit der Option --tmpfs. docker run -dt --name busybox_tmpfs --tmpfs /etc/running busybox Verwenden Sie die Methode --mount, um Parameter einzufügen und die Größe des temporären Speichers anzugeben. docker run -dt --name busybox_tmpfs2 --mount Typ=tmpfs,tmpfs-size=2048,Ziel=/etc/running busybox SpeicherdatenfreigabeEs gibt zwei Hauptmethoden, um Daten zwischen Containern zu teilen. Die erste ist relativ einfach und erfordert lediglich das Einbinden eines Verzeichnisses oder Volumes in mehrere Container. Ich werde hier nicht ins Detail gehen. Schauen wir uns an, wie die Freigabe über einen Zwischencontainer erreicht wird. Wir erstellen einen Zwischencontainer, der das Bind-Mount-Verzeichnis und ein Volume enthält. docker erstellen -v /share:/volume1 -v /volume2 --name volume_share busybox In dem Container, den wir freigeben müssen, können wir die Option --volumes-from verwenden, um ihn abzurufen. docker run -d -t --volumes-from volume_share --name container1 busybox Sehen wir uns das Feld „Mounts“ an. Container1 wurde nun in ein Bind-Verzeichnis und ein Volume eingebunden. "Reittiere": [ { "Typ": "binden", "Quelle": "/teilen", "Ziel": "/volume1", "Modus": "", "RW": wahr, "Ausbreitung": "rprivate" }, { "Typ": "Volumen", "Name": "21605e49a0ba90a1b952a32c1b3f0d42735da8bfe718f0dc76c37e91f1e51c0e", "Quelle": "/var/lib/docker/volumes/21605e49a0ba90a1b952a32c1b3f0d42735da8bfe718f0dc76c37e91f1e51c0e/_data", "Ziel": "/volume2", "Treiber": "lokal", "Modus": "", "RW": wahr, "Ausbreitung": "" } ], Das ist alles, was wir über die Docker-Containerspeicherung gelernt haben. Ich hoffe, dieser kurze Artikel wird Ihnen bei Bedarf nützlich sein. Damit ist dieser Artikel über verschiedene Speichermethoden für Docker-Container abgeschlossen. Weitere Informationen zur Speicherung von Docker-Containern finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Die Webseite kann nicht geöffnet werden, da dem Div-Element ein schließender Tag fehlt
>>: CSS, um den kleinen scharfen Eckeneffekt von Blasen zu erzielen
Auf Mobilgeräten ist das Flex-Layout sehr nützlic...
eins. Warum einen privaten Nexus-Server erstellen...
Inhaltsverzeichnis Erster Blick Erstellen einer V...
MySQL-Dirty-Pages Aufgrund des WAL-Mechanismus er...
Inhaltsverzeichnis Einführung Architektur Vorteil...
In diesem Artikel wird der Skriptcode für die aut...
Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...
HTML besteht aus Tags und Attributen, die zusamme...
Sie müssen Inspiration haben, um eine Website zu g...
1. Was ist Responsive Design? Responsive Design b...
Inhaltsverzeichnis Normale Paging-Abfrage So opti...
Ich möchte eine Seite mit CSS3-abgerundeten Ecken...
1. Docker-Netzwerkverwaltung 1. Docker-Container-...
1. Melden Sie sich bei MySQL an: mysql -u root -h...
1. Erstellen Sie einen Runner-Container mk@mk-pc:...