Was ist ein Containerdatenvolumen? Wenn sich die Daten im Container befinden, gehen sie verloren, sobald der Container gelöscht wird! Z. B.: Der MySQL-Container wurde gelöscht. Dies wird oft als Löschen der Datenbank und Weglaufen bezeichnet. Anforderungen: Daten können persistent gespeichert werden. Selbst wenn der Container sofort gelöscht wird, sind unsere Daten immer noch im Container. Wir können eine Technologie zum Teilen von Daten haben! Die vom Docker-Container generierten Daten werden mit dem lokalen Computer synchronisiert! Das ist die Rolltechnik! Mounten Sie das Verzeichnis und mounten Sie das Verzeichnis unseres Containers auf Linux! Zusammenfassung: Mithilfe der Volume-Technologie werden Datenpersistenz- und Synchronisierungsvorgänge erreicht. Daten können auch zwischen Containern geteilt werden. Datenvolumes verwenden Methode 1: Verwenden Sie den Befehl direkt zum Mounten von -v # Befehl docker run -it -v Host-Verzeichnis: Container-Verzeichnis -p Host-Port: Container-Port # Test # Das Host-Home-Verzeichnis ist leer [root@bogon home] # ls # Starten Sie das Contes-Image, um das Home des Hosts an das Home des Containers zu binden [root@bogon home]# docker run -v /home:/home/ -it centos [root@8dc073caf39c /]# cd home/ # Das Home-Verzeichnis des Containers ist leer [root@8dc073caf39c home]# ls # Erstellen Sie die Datei test.java im Containerverzeichnis [root@8dc073caf39c home]# touch test.java [root@8dc073caf39c Startseite]# ls test.java # Nach dem Wechsel in das Host-Home-Verzeichnis erschien die Datei test.java [root@8dc073caf39c home]# [root@bogon home]# ls test.java # Erstellen Sie die Datei test2.java im Home-Verzeichnis des Hosts [root@bogon home]# touch test2.java [root@bogon-Startseite]# ls test2.java test.java [root@bogon home]# docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 8dc073caf39c centos "/bin/bash" vor 3 Minuten Up 3 Minuten focused_nobel # Geben Sie den laufenden Container ein [root@bogon home]# docker exec -it 8dc073caf39c /bin/bash # Wechseln Sie in das Home-Verzeichnis des Containers [root@8dc073caf39c /]# cd home/ # Die Datei test2.java wurde gefunden [root@8dc073caf39c home]# ls test.java test2.java # Containerinformationen über den Befehl „inspect“ anzeigen [root@bogon home]# docker inspect 8dc073caf39c "Reittiere": [ { "Typ": "binden", "Quelle": "/home", # Host-Verzeichnis "Ziel": "/home", # Container-Verzeichnis "Modus": "", "RW": wahr, "Ausbreitung": "rprivate" } ], ## Fazit: Wenn wir -v zum Binden von Daten verwenden# 1. Wenn der Container stoppt, nimmt der Host Änderungen an den Daten vor und die Daten werden nach dem Start des Containers synchronisiert# 2. Wenn der Container gelöscht wird, sind die Daten im Verzeichnis auf dem Host immer noch vorhanden## Vorteile: Nachdem wir das Datenvolumen verwendet haben und die Konfigurationsdatei in Zukunft ändern, müssen wir sie nur lokal ändern und der Container wird automatisch synchronisiert Installieren Sie MySQL MySQL-Datenpersistenzproblem # -e MYSQL_ROOT_PASSWORD=my-secret-pw Setzt das initiale Passwort auf my-secret-pw # Offizieller Befehl: docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag # prüfen # Interpretation # -d im Hintergrund ausführen # -p 3306:3306 Bind-Port # -v /home/mysql/conf:/etc/mysql/conf.d Datenträger-Mount-Technologie binden MySQL-Konfigurationsdatei # -v /home/mysql/data:/var/lib/mysql Datenträger-Mount-Technologie binden MySQL-Daten # -e MYSQL_ROOT_PASSWORD=123456 Umgebungskonfiguration ---》Setzen Sie das Anfangskennwort von MySQL auf 123456 # --name mysql0 Benennen Sie den Container mysql01 [root@bogon home]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql 6d75b6312f725de2c71709116af5755604ea60cd073f1daf3755c578c1e64f57 Benannte und anonyme Reittiere #Anonymer Mount -v Containerpfad! docker run -d -P --name nginx01 -v /etc/nginx nginx # Benannter Mount -v Volume-Name: Pfad im Container Docker Run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx # Testen Sie die anonyme Einbindung [root@localhost-Test]# docker run -d -P --name nginx01 -v /etc/nginx nginx 214dab398d9997a730b970b6e3bb08fa7e39bbb0ca91ad59f6b3f235d8f1b9bc # Alle Volumes anzeigen [root@localhost test]# Docker-Volume ls TREIBERVOLUMENNAME local 2c22e1c50ff7330b815b692f8f71a1fca878209223846c95626f7efd9dc2a83b # Anonyme Einbindung # Test der benannten Einbindung # Über -v Datenträgername: Pfad im Container [root@localhost test] # docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx a678d79886565601bf466ff41734cb5334bdaf9e881b9cbf11edb84e9d790251 # Alle Volumes anzeigen [root@localhost test]# Docker-Volume ls TREIBERVOLUMENNAME local 2c22e1c50ff7330b815b692f8f71a1fca878209223846c95626f7efd9dc2a83b # Anonymer Mount local juming-nginx # Benannter Mount # Informationen zu einem Datenvolumen anzeigen # Befehl Docker Volume Inspect Volume-Name # Alle Volumes in Docker-Containern befinden sich in /var/lib/docker/volumes/XXX/_data ohne angegebenes Verzeichnis [root@localhost test]# Docker-Volume prüfen juming-nginx [ { "Erstellt am": "2020-08-13T09:18:34+08:00", "Treiber": "lokal", "Labels": null, "Einhängepunkt": "/var/lib/docker/volumes/juming-nginx/_data", "Name": "juming-nginx", "Optionen": null, "Geltungsbereich": "lokal" } ] # Wir können eines unserer Volumes ganz einfach über die benannte Einbindung finden. In den meisten Fällen verwenden wir die benannte Einbindung. # So ermitteln Sie, ob es sich um eine benannte Einbindung, eine anonyme Einbindung oder eine Einbindung über einen angegebenen Pfad handelt! # -v Containerpfad # anonyme Einbindung # -v Volumename: Containerpfad # benannte Einbindung # -v Hostpfad: Containerpfad # Einbindung über angegebenen Pfad expandieren # Lese- und Schreibberechtigungen ändern über -v Volumename: Pfad im Container: ro rw # ro--->Nur lesen Nur lesen # rw--->Lesen Schreiben Lesen und Schreiben docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro nginx docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro nginx Erste Schritte mit DockerFile DockerFile ist die Build-Datei, die zum Erstellen des Docker-Images verwendet wird! Befehlsskript! Probieren Sie es zuerst aus! [root@localhost docker-test-volume]# cat dockerfile FORM centos VOLUMEN ["Volumen01", "Volumen02"] CMD echo "-----Ende-----" CMD /bin/bash # Build# Befehl docker build -f Shell-Skriptdatei -t Image-Name: Versionsnummer [root@localhost docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t centos:1.0 . Senden des Build-Kontexts an den Docker-Daemon 2.048 kB Schritt 1/4: VON centos ---> 0d120b6ccaa8 Schritt 2/4: VOLUME ["volume01", "volume02"] ---> Wird ausgeführt in 4e6de7bc2f15 Zwischenbehälter entfernen 4e6de7bc2f15 ---> f9e48207902b Schritt 3/4: CMD echo "-----end-----" ---> Läuft in b22adea363e5 Zwischenbehälter entfernen b22adea363e5 ---> a7518e2e1c72 Schritt 4/4: CMD /bin/bash ---> Wird ausgeführt in ae1b746bef6b Zwischenbehälter entfernen ae1b746bef6b ---> d840628c30a9 Erfolgreich erstellt d840628c30a9 Erfolgreich getaggt centos:1.0 # Sehen Sie sich das Bild an [root@localhost overlay2]# Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE centos 1.0 d840628c30a9 vor 12 Minuten 215 MB # Unser eigenes Image centos latest 0d120b6ccaa8 vor 2 Tagen 215 MB # Starten Sie das von uns generierte Image [root@1af673cf9c88 /]# docker run -it d840628c30a9 /bin/bash [root@1af673cf9c88 /]# ls -l gesamt 0 lrwxrwxrwx. 1 root root 7 11. Mai 2019 bin -> usr/bin drwxr-xr-x. 5 root root 360 13. Aug. 02:18 dev drwxr-xr-x. 1 root root 66 13. Aug. 02:18 usw. drwxr-xr-x. 2 root root 6 11. Mai 2019 Startseite lrwxrwxrwx. 1 root root 7 11. Mai 2019 lib -> usr/lib lrwxrwxrwx. 1 root root 9 11. Mai 2019 lib64 -> usr/lib64 drwx------. 2 root root 6 Aug 9 21:40 verloren+gefunden drwxr-xr-x. 2 root root 6 11. Mai 2019 Medien drwxr-xr-x. 2 root root 6 11. Mai 2019 mnt drwxr-xr-x. 2 root root 6 11. Mai 2019 opt dr-xr-xr-x. 117 root root 0 13. August 02:18 proc dr-xr-x---. 2 Wurzel Wurzel 162 9. Aug. 21:40 Wurzel drwxr-xr-x. 11 root root 163 9. Aug. 21:40 ausführen lrwxrwxrwx. 1 root root 8 11. Mai 2019 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 11. Mai 2019 srv dr-xr-xr-x. 13 root root 0 11. August 09:58 sys drwxrwxrwt. 7 root root 145 9. Aug. 21:40 tmp drwxr-xr-x. 12 root root 144 9. Aug. 21:40 usr drwxr-xr-x. 20 root root 262 9. Aug. 21:40 var drwxr-xr-x. 2 root root 6 Aug 13 02:18 volume01 # Dies ist das Datenvolume-Verzeichnis, das automatisch gemountet wird, wenn wir das Image generieren drwxr-xr-x. 2 root root 6 Aug 13 02:18 volume02 # Dieses Volume muss über ein mit dem externen Verzeichnis synchronisiertes Verzeichnis verfügen! Lassen Sie uns Folgendes herausfinden: # 1. Fragen Sie die Containerinformationen basierend auf der Container-ID ab --》Informationen zum Datenvolumen # Docker-Inspektion 1af673cf9c88 # 2. Suchen Sie den Datenträgernamen, der Volume01 entspricht, gemäß den Datenträgerinformationen # Docker Volume Inspection 8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 # 3. Fragen Sie die Datenvolumeninformationen entsprechend dem Datenvolumennamen ab - „Suchen Sie das entsprechende Verzeichnis in Linux # docker volume inspect 8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 # Erstellen Sie eine Datei im Container. Erstellen Sie die Datei test.java im Datenvolumen volume01 [root@1af673cf9c88 volume01]# touch test.java [root@1af673cf9c88 volume01]# ls test.java # Beenden Sie den Container [root@1af673cf9c88 volume01]# exit Ausfahrt # Containerinformationen anzeigen [root@localhost overlay2]# docker inspect 1af673cf9c88 # Suchen Sie den Namen, der dem gemounteten Volume volume01 entspricht, nämlich: 8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 "Reittiere": [ { "Typ": "Volumen", "Name": "8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3", "Quelle": "/var/lib/docker/volumes/8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3/_data", "Ziel": "volume01", "Treiber": "lokal", "Modus": "", "RW": wahr, "Ausbreitung": "" }, { "Typ": "Volumen", "Name": "046d0baa3cc0bc3540c5e7248808358371641bfba4e0bbd139c99fe851751da2", "Quelle": "/var/lib/docker/volumes/046d0baa3cc0bc3540c5e7248808358371641bfba4e0bbd139c99fe851751da2/_data", "Ziel": "volume02", "Treiber": "lokal", "Modus": "", "RW": wahr, "Ausbreitung": "" } ], # Suchen Sie anhand des Datenträgernamens 8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 den Datenträger im Linux-Speicherort [root@localhost overlay2]# docker volume inspect 8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3 [ { "Erstellt am": "2020-08-13T10:27:12+08:00", "Treiber": "lokal", "Labels": null, "Einhängepunkt": "/var/lib/docker/volumes/8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3/_data", "Name": "8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3", "Optionen": null, "Geltungsbereich": "lokal" } ] # Suchen Sie unsere Datei test.java im Verzeichnis /var/lib/docker/volumes/8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3/_data/ [root@localhost volumes]# cd /var/lib/docker/volumes/8c3486526093c755785725111b4063cd93a5ba88f9c2ac09f45741a0f1d08fd3/_data/ [root@localhost _data]# ls test.java Datenvolumencontainer Mehrfache MySQL-Datensynchronisierung! # Verwenden Sie --volumes-from Containername, um Daten zwischen Containern zu teilen. # Starten Sie ein Image mit dem Namen docker01 [root@localhost _data]# docker run -it --name docker01 centos:1.0 /bin/bash [root@a85fbed0ebc9 /]# ls bin dev etc home lib lib64 verloren+gefunden Medien mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 # Starten Sie dasselbe Image mit dem Namen docker02 und verknüpfen Sie es mit docker01. Zu diesem Zeitpunkt wird docker01 als Datenvolumencontainer bezeichnet [root@localhost _data]# docker run -it --name docker02 --volumes-from docker01 centos:1.0 [root@a89fb82eeeb5 /]# ls bin dev etc home lib lib64 verloren+gefunden Medien mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 # Erstellen Sie test.txt im Verzeichnis volume01 des Containers docker02 [root@a89fb82eeeb5 /]# cd volume01/ [root@a89fb82eeeb5 volume01]# ls [root@a89fb82eeeb5 volume01]# touch test.txt [root@a89fb82eeeb5 volume01]# ls test.txt # Containerinformationen anzeigen [root@a89fb82eeeb5 volume01]# [root@localhost _data]# docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN a89fb82eeeb5 centos:1.0 "/bin/sh -c /bin/bash" Vor etwa einer Minute Up Vor etwa einer Minute docker02 a85fbed0ebc9 centos:1.0 "/bin/bash" vor 4 Minuten Up 4 Minuten docker01 # Geben Sie den Container mit dem Namen docker01 [root@localhost _data] ein# docker exec -it a85fbed0ebc9 /bin/bash [root@a85fbed0ebc9 /]# ls bin dev etc home lib lib64 verloren+gefunden Medien mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 # Wechseln Sie in das Verzeichnis volume01 des Containers [root@a85fbed0ebc9 /]# cd volume01/ # Habe die Datei test.txt gefunden [root@a85fbed0ebc9 volume01]# ls test.txt # Erstellen Sie test01.txt [root@a85fbed0ebc9 volume01]# touch test01.txt [root@a85fbed0ebc9 volume01]# ls test.txt test01.txt # Geben Sie den Container mit dem Namen docker02 [root@localhost _data] ein# docker exec -it a89fb82eeeb5 /bin/bash [root@a89fb82eeeb5 /]# ls bin dev etc home lib lib64 verloren+gefunden Medien mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 [root@a89fb82eeeb5 /]# cd volume01/ # Die Datei test01.txt wurde gefunden [root@a89fb82eeeb5 volume01]# ls test.txt test01.txt # Starten Sie das gleiche Image mit dem Namen docker03 und verknüpfen Sie es mit docker01 [root@localhost _data]# docker run -it --name docker03 --volumes-from docker01 centos:1.0 # Wechseln Sie in das Verzeichnis volume01 und suchen Sie die Datei test.txt test01.txt [root@11d93f9bcd89 /]# cd volume01/ [root@11d93f9bcd89 volume01]# ls test.txt test01.txt #Testvorgang: 1. Führen Sie den Image-Container centos:1.0 mit dem Namen docker01 aus # 2. Führen Sie den centos:1.0-Image-Container mit dem Namen docker02 aus und geben Sie Daten über --volumes-from docker01# an ihn weiter. 3. Führen Sie den centos:1.0-Image-Container mit dem Namen docker03 aus und geben Sie Daten über --volumes-from docker01# an ihn weiter. 4. Führen Sie den centos:1.0-Image-Container mit dem Namen docker04 aus und geben Sie Daten über --volumes-from docker03# an ihn weiter. 5. Führen Sie den centos-Image-Container mit dem Namen docker05 aus und geben Sie Daten über --volumes-from docker03# an ihn weiter. Nach dem Testen wurde Folgendes festgestellt: # 1. Fügen Sie Dateien zum Verzeichnis volume01 eines beliebigen Containers hinzu, und die hinzugefügten Dateien werden zur Datenfreigabe im Verzeichnis der anderen vier Container angezeigt. # 2. Stoppen und löschen Sie den Container mit dem Namen docker01, und die Dateien im Verzeichnis volume01 der anderen vier Container sind weiterhin vorhanden. # 3. Stoppen und löschen Sie den Container mit dem Namen docker01 und fügen Sie Dateien zum Verzeichnis volume01 eines beliebigen der anderen vier Container hinzu. Die anderen drei Container geben ebenfalls Daten frei. # 4. Die Datenvolumes in jedem Container haben unterschiedliche Namen, entsprechen jedoch demselben Datenverzeichnis im Linux-System. Das heißt, die Datenvolume-Verzeichnisse in jedem Container verweisen auf dasselbe Datenverzeichnis im Linux-System [root@localhost _data]# docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 78cd51a35c41 centos "/bin/bash" vor 17 Minuten Up 17 Minuten trusting_tharp e6e0988c50cd centos "/bin/bash" vor 17 Minuten Up 17 Minuten docker05 c5ebc03e6819 centos:1.0 "/bin/sh -c /bin/bash" vor 19 Minuten Up 19 Minuten docker04 11d93f9bcd89 centos:1.0 "/bin/sh -c /bin/bash" vor 22 Minuten Up 22 Minuten docker03 a89fb82eeeb5 centos:1.0 "/bin/sh -c /bin/bash" vor 31 Minuten Up 31 Minuten docker02 [root@localhost _data]# docker inspect e6e0988c50cd "Reittiere": [ { "Typ": "Volumen", "Name": "fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62", "Quelle": "/var/lib/docker/volumes/fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62/_data", "Ziel": "volume01", "Treiber": "lokal", "Modus": "", "RW": wahr, "Ausbreitung": "" }, ] [root@localhost _data]# docker inspect c5ebc03e6819 "Reittiere": [ { "Typ": "Volumen", "Name": "fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62", "Quelle": "/var/lib/docker/volumes/fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62/_data", "Ziel": "volume01", "Treiber": "lokal", "Modus": "", "RW": wahr, "Ausbreitung": "" }, ] [root@localhost _data]# docker inspect 11d93f9bcd89 "Reittiere": [ { "Typ": "Volumen", "Name": "fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62", "Quelle": "/var/lib/docker/volumes/fc54c991eea888057575be45a03fe22a32303a6b1239a0a4099dd201b0b41a62/_data", "Ziel": "volume01", "Treiber": "lokal", "Modus": "", "RW": wahr, "Ausbreitung": "" }, ] Mehrere MySQL zur gemeinsamen Datennutzung
abschließend: Konfigurationsinformationen werden zwischen Containern weitergegeben und der Lebenszyklus des Datenvolumencontainers wird fortgesetzt, bis kein Container mehr den Speicherort verwendet. Sobald die lokalen Daten jedoch lokal gespeichert sind, werden sie nicht gelöscht. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: js zur Realisierung von Login- und Registrierungsfunktionen
>>: JDBC-Idee: MySQL importieren, um Java-JAR-Paket zu verbinden (Mac)
In der täglichen Entwicklung streiten sich Front-...
Unten beginnt der Haupttext. 123WORDPRESS.COM Her...
Oder schreiben Sie den Installationsvorgang selbs...
1. Laden Sie die erforderlichen Pakete herunter w...
Umfeld: 1. Windows Server 2016 Datacenter 64-Bit ...
Inhaltsverzeichnis Vorne geschrieben Anmeldeübers...
Was ist SSH? Administratoren können sich remote a...
In diesem Artikel wird der spezifische Code des W...
Inhaltsverzeichnis Problembeschreibung Szenario S...
Nach der Installation der neuesten Version 8.0.11...
1. Dreieck Rahmeneinstellungen Code: Breite: 300p...
Dieser Abschnitt beginnt mit den Details der Text...
Inhaltsverzeichnis Vorwort 1. Grundlegende Verwen...
Windows Server 2012 und Windows Server 2008 unter...
Die Betriebsumgebung dieses Tutorials: Windows 7-...