Docker Daten speichern: Docker Volumes vs. Host-Ordner

Ich betreibe eine handvoll Docker Container auf einem einzelnen Linux-Host. Docker-Container werden bei einem erneuten erstellen oder beim Austausch auf eine neuere Imageversion bekanntlich ausgetauscht und verlieren dabei alle geĂ€nderten Daten. Um bestimmte Ordner eines Containers permanent zu speichern, mĂŒssen diese ĂŒber Volumes oder Bind-Mounts ausgelagert werden. Ich habe dazu meist bestimmte Pfade der Container in definierten Ordnern am Host verbunden (Bind-Mounts). Mit ein Grund fĂŒr die Verwendung von Bind Mounts anstelle von Volumes ist, dass ich die Ordner ĂŒber den Host einfacher kopieren, sichern oder auf einen anderen Host ĂŒbertragen kann. Aber ist das ĂŒberhaupt der richtige Ansatz? Sollte ich besser Docker-Volumes einsetzen? Was ist der Vorteil von Docker Volumes?

Bind-Mounts

Wie bereits erwĂ€hnt sind Bind-Mounts definierte Ordner des Host-Rechners die in bestimmte Verzeichnisse des Docker-Containers verbunden werden. Der Host-Ordner fĂŒgt sich im Dateisystem des Docker Containers nahtlos ein und verhĂ€lt sich im Filesystem des Containers wie jeder andere Ordner. Am Host-Ordner können die Daten gelesen und geĂ€ndert werden. 

Docker Volumes 

Volumes sind die empfohlene Variante um Daten von Docker-Containern zu speichern. Volumes sind Ordner die vollstĂ€ndig von Docker verwaltet werden, was den Speicher vom darunterliegenden Host unabhĂ€ngig und sicherer macht. Die Verwaltung von Docker-Volumes kann ĂŒber Docker-CLI-Befehle oder der Docker-API erfolgen. 

Docker Volumes vs. Bind-Mounts

Vorteile von Volumes

  • Volumes werden von Docker verwaltet und sind damit, genau wie die Container: betriebssystemunabhĂ€ngig.
  • Volumes können mit Docker-CLI-Befehlen oder der Docker-API verwaltet werden.
  • Beim Einsatz von Docker Desktop auf Windows oder MAC liefern Volumes eine bessere Performance
  • Der mögliche Einsatz von Volume-Treibern und die damit verbundenen Optionen Volumes auf entfernten Hosts oder Cloud-Anbietern zu speichern und den Inhalt zu verschlĂŒsseln oder andere Funktionen hinzuzufĂŒgen.
  • Der Inhalt von Docker Volumes kann vorbefĂŒllt werden
  • Laut der offiziellen Docker Dokumentation sind Volumes einfacher zu sichern oder zu migrieren als Bind-Mounts: 
    Volumes are easier to back up or migrate than bind mounts.
    Quelle: https://docs.docker.com/storage/volumes/ (Abrufdatum: 06.09.2022)
    Diese Aussage trifft meiner Meinung nach nicht auf jedes Setup zu. Beim Einsatz von Volumes sollte der Zugriff nicht mehr direkt ĂŒber den Host erfolgen, was den Einsatz von Host-Befehlen, wie rsync oder ein anderes am Host installiertes Backup erschwert. 

Nachteile

Docker Volumes verwenden

Beim Start eines Containers mit "docker run" können Volumes mit dem Parameter -v oder -mount angegeben werden:

docker run -v volumename:/app nginx:latest

Beim Einsatz von --mount als Parameter werden die Eigenschaften etwas ausfĂŒhrlicher angegeben:

docker run --mount source=volumename,target=/app nginx:latest

Mit Docker Compose können Volumes im Bereich volumes definiert und in den Services wie folgt angegeben werden:

File: docker-compose.yml

version: '3.1'

services:
  service1:
    image: test
    ...
    volumes:
      - volumename4service1:/var/www/html

  service1:
    image: test2
    ...
    volumes:
      - volumename4service2:/var/www/html

volumes:
  volumename4service1:
  volumename4service2:
...

Zum Vergleich: Bind-Mounts verwenden

Um anstelle von Volumes Bind-Mounts zu verwenden, wird statt des Volume-Namens einfach ein Pfad im lokalen Dateisystem verwendet. Als Pfad kann ein absoluter oder ein relativer Pfad verwendet werden. Absolute Pfade beginnen mit "/" und sind unabhÀngig vom aktuellen Ordner in dem sich die docker-compose-Datei befindet. Relative Pfade können mit ./Ordnername als Unterordner relativ zur docker-compose.yml-Datei verwendet werden:

File: docker-compose.yml

version: '3.1'

services:
  service1:
    image: test
    ...
    volumes:
      - /var/absolutefolderpath:/var/www/html

  service1:
    image: test2
    ...
    volumes:
      - ./relativefolderpath:/var/www/html

...

Volumes eines Containers anzeigen: docker inspect

Um herauszufinden, welche Volumes oder Mounts ein Container verwendet, kann der Befehl "docker inspect containername" verwendet werden:

docker inspect wordpress

FAQ

Wo befinden sich Docker-Volumes? 

Volumes werden in einem Ordner im Host-Dateisystem gespeichert und von Docker verwaltet (fĂŒr Linux: /var/lib/docker/volumes/).

Was ist der Unterschied zwischen Docker Volumes und Bind-Mounts

Beide: Docker Volumes und Bind-Mounts verknĂŒpfen bestimmte Ordner eines Containers mit einem Ordner am Host-Betriebssystem. Bind-Mounts sind dabei definierte Ordner am Host-Betriebssystem, fĂŒr Docker Volumes wird der Pfad hingegen von Docker verwaltet. Auch Docker-Volumes befinden sich in einem Ordner am Host-Betriebssystem, der Unterschied besteht aber darin, dass Docker den Ordner vorgibt und verwaltet und den Einsatz von Docker-CLI-Befehlen oder der Docker-API ermöglicht.

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂŒr deine Bewertung!

Aktualisiert: 26.12.2022 von Bernhard | Translation English |🔔 | Kommentare:0

➚ Docker-Befehle in der Praxis | ➊ Docker | Praxis: Backup Docker Container-Daten: Volumes / Bind Mounts ➚

Top-Artikel in diesem Bereich


Docker Container GUI grafische WeboberflÀche mit Portainer

UrsprĂŒnglich habe ich Docker rein ĂŒber die Kommandozeile verwaltet, was mit ein paar simplen Befehlen schon sehr einfach ist. Noch mehr Übersicht und eine komfortable Admin-OberflĂ€che liefert Portainer. Portainer selbst kann auch als Docker-Container gestartet werden und macht das Verwalten von Containern zum Kinderspiel.


Docker-Container unter Windows starten: Docker Desktop

Docker-Container können mittlerweile auch unter Windows betrieben werden, dazu ist im Wesentlichen nur die Installation des „Docker Desktop“ notwendig. 


Docker Swarm, Portainer und Traefik kombiniert

Wie bereits mehrfach auf dieser Seite erwĂ€hnt, verwende ich fĂŒr den Zugriff auf meine Docker-Container primĂ€r den Reverse-Proxy Traefik. Um die Container in einer grafischen GUI verwalten zu können, habe ich zusĂ€tzlich Portainer im Einsatz. FĂŒr einen Single-Server passt das Setup so weit, wer aber mehrere Server einsetzen will, kann dazu Docker-Swarm verwenden. Ich habe dazu zunĂ€chst Portainer in Kombination mit Swarm getestet und das Setup um Traefik inklusive...

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details