GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Was sind Docker-Volumes und wie verwenden Sie sie?

Standardmäßig sind Docker-Container völlig zustandslos. Die im Container gespeicherten Daten sind flüchtig und werden gelöscht, wenn der Container heruntergefahren wird. Dies ist offensichtlich für viele Anwendungen nicht ideal, daher bietet Docker einige Möglichkeiten, mit dem Zustand umzugehen.

Was sind Volumes?

Die einfachste Möglichkeit, Docker-Daten persistent zu machen, ist bind mounts , die einen Speicherort auf der Festplatte des Hosts buchstäblich an einen Speicherort auf der Festplatte des Containers binden. Diese sind einfach zu erstellen und zu verwenden, aber ein wenig umständlich, da Sie die Verzeichnisse selbst einrichten und verwalten müssen.

Volumes sind wie virtuelle Festplatten, die von Docker verwaltet werden. Docker übernimmt das Speichern auf der Festplatte (normalerweise in /var/lib/docker/volumes/ ) und gibt ihnen einen leicht zu merkenden Einzelnamen anstelle eines Verzeichnispfads. Es ist einfach, sie mit der Docker-CLI zu erstellen und zu entfernen.

Diese haben neben der Verwaltung durch Docker noch einige weitere Vorteile. Sie funktionieren sowohl auf Linux- als auch auf Windows-Containern, können sicherer von mehreren Containern gemeinsam genutzt werden und die Volumentreiber ermöglichen es Cloud-Anbietern, Remote-Hosting für die zugrunde liegenden Daten bereitzustellen. Insgesamt sind Volumes einfacher zu verwenden als Bind-Mounts und werden von Docker für die Statusverwaltung empfohlen.

Natürlich sollte man sich überlegen, ob Docker-Daten wirklich auf dem Server gespeichert werden müssen. Für viele Anwendungen reicht die Verwendung eines externen Remote-Datenspeichers wie Amazon S3 oder einer externen Datenbank aus, um die verwendeten Daten zu speichern, ohne sie auf dem Frontend-Server zu binden.

Wie verwenden Sie sie?

Sie können ein neues Volume über die Befehlszeile mit dem folgenden Befehl erstellen:

docker volume create nginx-config

Und wenn Sie dann Ihren Docker-Container ausführen, verknüpfen Sie ihn mit dem Ziel im Container mit --mount Flagge:

docker run -d 
--name devtest 
--mount source=nginx-config,target=/etc/nginx 
nginx:latest

Wenn Sie docker inspect <name> , sehen Sie das Volumen unter Mounts aufgelistet Abschnitt.

Wenn Sie Docker Compose verwenden, ist die Einrichtung ebenfalls einfach. Fügen Sie einfach ein volumes hinzu -Eintrag für jeden Containerdienst, den Sie haben, und ordnen Sie dann einen Volume-Namen einem Speicherort im Gast zu. Sie müssen auch eine Liste von Volumes in einem volumes der obersten Ebene bereitstellen Schlüssel für Compose zur Bereitstellung.

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-config:/etc/nginx/
volumes:
  nginx-config:

Dadurch wird das Volume für dieses Compose automatisch erstellt. Wenn Sie ein vorgefertigtes Volume außerhalb von Compose verwenden möchten, geben Sie external: true an in der Volume-Konfiguration:

volumes:
  cms-content:
    external: true

Wenn Sie stattdessen einfach einen Bind-Mount durchführen und sich nicht um Volumes kümmern möchten, geben Sie einfach einen Pfadnamen anstelle des Volume-Namens ein und verzichten Sie auf die Definition der Volume-Namen.

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - /docker/nginx-config/:/etc/nginx/

Sie können die vollständige Dokumentation von Docker zur Verwendung von Volumes mit Compose lesen, wenn Ihr Anwendungsfall etwas Spezifischeres erfordert.

Übertragen von Docker-Volumes

Docker-Volumes sind nur Ordner, die automatisch erstellt und unter /var/lib/docker/volumes/ gespeichert werden , wobei jedes Volume unter ./volumename/_data/ gespeichert wird . Zum Sichern und Wiederherstellen können Sie diese Volumes einfach direkt sichern.

Wenn Sie stattdessen die Docker-CLI verwenden möchten, bieten sie leider keine einfache Möglichkeit, dies zu tun. Um die Volumes eines Containers zu sichern, benötigen Sie den Containernamen sowie den Bereitstellungsort, an dem die Daten gespeichert sind.

Der Weg, dies zu tun, ist ein bisschen wie ein Hack – Sie müssen einen Befehl in einem neuen Docker-Container ausführen, das aktuelle Shell-Verzeichnis binden, mounten, das Volume in diesen Container mounten und dann tar das Verzeichnis in ein Backup. Am Ende erhalten Sie eine backup.tar des Volumens:

docker run --rm --volumes-from containername -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /mountlocation

Anschließend können Sie das Archiv analog in das Zielverzeichnis entpacken:

docker run --rm --volumes-from containername -v $(pwd):/backup ubuntu bash -c "cd /mountlocation && tar xvf /backup/backup.tar --strip 1"

Dies ist jedoch immer noch besser, als den Host-Standort kennen zu müssen, sodass Sie dies automatisieren können, wenn Sie möchten.


Docker
  1. Docker-Protokolle:Was sie sind und wie sie verwendet werden (mit Beispielen)

  2. Welche zusätzlichen Thumbnailer sind verfügbar und wie werden sie installiert?

  3. Wie und warum man einen Remote-Docker-Host verwendet

  4. So installieren und verwenden Sie Docker Compose unter CentOS

  5. Was sind SELinux-Modi und wie werden sie eingestellt?

So installieren und verwenden Sie Docker Compose unter Ubuntu 22.04

So installieren und verwenden Sie Docker unter Ubuntu 22.04

Was ist Docker Compose und wie wird es verwendet?

So installieren und verwenden Sie Docker unter Ubuntu 20.04

Was ist PPA in Ubuntu Linux und wie verwende ich sie?

So installieren und verwenden Sie Docker unter AlmaLinux 8