Docker Daten speichern: Docker Volumes vs. Host-Ordner

This page is also available in English

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 anstelle 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 🔔


Top-Artikel in diesem Bereich


ioBroker installieren - Docker
Mit ioBroker können verschiedene Automatisierungslösungen oder Geräte in einem System zusammengefasst werden. Um bestimmte Gateways oder Geräte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.

Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ
Dank zahlreicher Integrationsmöglichkeiten ist Home-Assistant eine einfache Plattform für das Steuern verschiedenster Smart-Home Geräte. Im Vergleich zu ioBroker ist mir der Start mit Home Assistant wesentlich einfacher gefallen. Während ich für ioBroker noch am Suchen war, welches Frontend ich für meine Dashboards verwenden könnte, hatte ich mit Home-Assistant out of the box ein fertig eingerichtetes System. Die Lovelance Dashboards von Home Assistant können einfach in der GUI zusammengeklickt...

Bitwarden in Docker betreiben - Setup Schritt für Schritt
Bitwarden ist ein webbasierter Passwort-Manager, ähnlich LastPass, aber Open Source und der Möglichkeit diesen selbst zu betreiben (hosten). Wie sich Bitwarden im Vergleich zu anderen Passwort-Managern einordnet, habe ich auf folgender Seite überlegt: Passwort-Manager sicher? KeePass vs. LastPass vs. Bitwarden. Bitwarden besteht aus mehreren Services, welche über verschiedene Container bereitgestellt werden können. Das relativ aufwändige Setup wurde mit "Bitwarden Unified" speziell für ein Selbs...

Fragen / Kommentare


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