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 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 | Translation English |ūüĒĒ

‚ě® 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 Docker-Containern zum Kinderspiel.


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...


Webserver mit Docker Container umziehen, Theorie und Praxis

Wer einen virtuellen Server oder Cloud-Server mietet, muss diesen f√ľr ein neues Betriebssystem von Zeit zu Zeit austauschen. Sp√§testens, wenn f√ľr das Betriebssystem keine Updates mehr zur Verf√ľgung gestellt werden, ist ein Serverwechsel unausweichlich. Vor einiger Zeit habe ich alle Websites auf Docker-Container umgestellt, was den Umzug beschleunigen soll. Zun√§chst etwas Theorie zu meinen √úberlegungen, dann wie mein Serverumzug zuletzt vonstattenging. Zus√§tzli...

Fragen / Kommentare


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