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