Ein Volume mounten um Daten persistent zu speichern
In diesem Schritt lernen Sie, wie Sie Docker Volumes verwenden können, um von Containern generierte und genutzte Daten persistent zu speichern. Standardmäßig sind Daten innerhalb eines Containers ephemer (flüchtig) - sie gehen verloren, wenn der Container entfernt wird. Volumes bieten eine Möglichkeit, Daten außerhalb des Container-Dateisystems zu speichern, sodass sie auch nach dem Stoppen oder Entfernen des Containers erhalten bleiben.
Zuerst stoppen und entfernen wir den my-nginx
-Container aus dem vorherigen Schritt.
docker stop my-nginx
docker rm my-nginx
Nun erstellen wir ein Docker Volume. Volumes werden von Docker verwaltet und in einem speziellen Bereich auf dem Host-Rechner gespeichert.
docker volume create my-volume
Sie sollten den Namen des Volumes (my-volume
) sehen, was die erfolgreiche Erstellung bestätigt.
Sie können vorhandene Volumes mit dem Befehl docker volume ls
auflisten.
docker volume ls
In der Liste sollten Sie my-volume
sehen.
Jetzt führen wir einen neuen nginx
-Container aus und mounten my-volume
in das standardmäßige Nginx Webroot-Verzeichnis (/usr/share/nginx/html
) im Container. Dadurch werden alle Dateien in diesem Container-Verzeichnis tatsächlich im my-volume
auf dem Host gespeichert.
Wir starten den Container im Detached-Modus (-d
), veröffentlichen Port 80 des Containers auf Port 8081 des Hosts (-p 8081:80
), vergeben ihm einen Namen (my-nginx-volume
) und verwenden das -v
-Flag zum Mounten des Volumes. Das Format für benannte Volumes ist volume_name:container_path
.
docker run -d --name my-nginx-volume -p 8081:80 -v my-volume:/usr/share/nginx/html nginx
Die ausgegebene Container-ID zeigt an, dass der Container läuft.
Nun legen wir eine einfache HTML-Datei im gemounteten Volume ab. Dazu führen wir einen Befehl im laufenden Container mit docker exec
aus. Wir erstellen eine Datei index.html
in /usr/share/nginx/html
mit einfachem Inhalt.
docker exec my-nginx-volume sh -c 'echo "<h1>Hello from the volume!</h1>" > /usr/share/nginx/html/index.html'
Dieser Befehl führt eine Shell (sh -c
) im Container aus und erstellt die index.html
-Datei.
Jetzt greifen wir auf den Webserver auf Port 8081 zu, um den Inhalt unserer Datei zu sehen.
curl http://localhost:8081
Sie sollten <h1>Hello from the volume!</h1>
sehen. Dies bestätigt, dass die Datei im gemounteten Volume gespeichert wurde.
Um die Persistenz zu demonstrieren, stoppen und entfernen wir den Container.
docker stop my-nginx-volume
docker rm my-nginx-volume
Nun starten wir einen neuen Container mit demselben Volume. Wir nennen ihn my-nginx-volume-new
und veröffentlichen Port 80 auf Host-Port 8082.
docker run -d --name my-nginx-volume-new -p 8082:80 -v my-volume:/usr/share/nginx/html nginx
Der neue Container verwendet dasselbe Volume. Wir greifen auf Port 8082 zu:
curl http://localhost:8082
Sie sollten immer noch <h1>Hello from the volume!</h1>
sehen, da die Datei im Volume gespeichert blieb. Dies zeigt die Persistenzfunktion von Volumes unabhängig vom Container-Lebenszyklus.