8.1 Einführung in virtuelle Festplatten
Die Einbindung von Volumes — das ist eine der nützlichsten Features von Docker. Damit können Container einfach mit den Daten des Host-Systems arbeiten. Diese Funktion macht das Datenmanagement flexibel und bequem: Du kannst Daten langfristig speichern, zwischen Containern teilen und problemlos Backups erstellen oder Daten wiederherstellen, falls etwas schiefgeht.
Volumes in Docker — das ist eine Möglichkeit, Daten so zu speichern, dass sie unabhängig von Containern sind. Selbst wenn ein Container gelöscht wird, bleiben die in Volumes gespeicherten Informationen sicher. Volumes können an Container angebunden (eingebunden) werden, was es erlaubt, Daten separat zu speichern und wiederzuverwenden, unabhängig davon, wie oft du Container erstellst oder löschst.
Haupttypen von Volumes
- Anonyme Volumes (Anonymous Volumes)
- Automatisch von Docker erstellt, wenn für einen Container kein Volume explizit angegeben ist.
- Werden für die vorübergehende Datenspeicherung verwendet.
- Benannte Volumes (Named Volumes)
- Werden von Docker erstellt und verwaltet.
- Können an mehrere Container angebunden werden und bleiben erhalten, selbst nach deren Löschung oder Beendigung.
- Bind Mounts
- Verknüpfen ein Verzeichnis auf dem Host-System mit einem Verzeichnis im Container.
- Sind ideal für den Zugriff auf Daten des Host-Systems und praktisch während der Entwicklung.
Grundlegende Syntax des docker run
Kommandos für die Einbindung von Volumes
-v <host_path>:<container_path>
Vollständige Syntax:
docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]
Wichtige Parameter für die Einbindung von Volumes
1. Parameter -v
oder --volume
Wird verwendet, um ein benanntes Volume oder ein Bind Mount zu erstellen.
Beispiel:
docker run -d -v /host/data:/container/data nginx
2. Parameter --mount
Bietet eine flexiblere und detailliertere Methode zur Einbindung von Volumes und unterstützt zusätzliche Parameter.
Beispiel:
docker run -d --mount type=bind,source=/host/data,target=/container/data nginx
8.2 Erstellen und Verwenden von Volumes
1. Benannte Volumes
Benannte Volumes werden von Docker erstellt und verwaltet. Sie sind für die langfristige Speicherung von Daten gedacht, die zwischen Neustarts oder dem Löschen von Containern erhalten bleiben sollen.
Erstellen eines benannten Volumes:
docker volume create my_volume
Starten eines Containers mit einem eingebundenen Volume:
In diesem Beispiel wird das Volume my_volume
in das Verzeichnis /data
innerhalb des Containers my_container
eingebunden. Alle Daten, die in /data
geschrieben werden, bleiben im Volume gespeichert und sind auch nach dem Löschen des Containers verfügbar.
docker run -d -v my_volume:/data --name my_container nginx
2. Anonyme Volumes
Anonyme Volumes werden von Docker automatisch erstellt und mit einem bestimmten Container verknüpft. Sie sind nützlich für temporäre Daten, die nach dem Löschen des Containers nicht erhalten bleiben müssen.
Starten eines Containers mit einem anonymen Volume:
In diesem Beispiel erstellt Docker automatisch ein anonymes Volume und bindet es in das Verzeichnis /data
innerhalb des Containers ein.
docker run -d -v /data --name my_container nginx
3. Gebundene Verzeichnisse
Gebundene Verzeichnisse ermöglichen es, Verzeichnisse des Host-Systems in Containern zu montieren. Dies ist praktisch für die gemeinsame Nutzung von Daten zwischen Containern und dem Host-System. Dieser Ansatz wird auch häufig in der Entwicklungsphase verwendet, wenn der Quellcode auf dem Host-System gespeichert ist.
Starten eines Containers mit einem gebundenen Verzeichnis:
In diesem Beispiel wird das Verzeichnis /host/data
auf dem Host-System in das Verzeichnis /container/data
innerhalb des Containers my_container
eingebunden.
docker run -d -v /host/data:/container/data --name my_container nginx
8.3 Beispiele für die Verwendung von Volumes
1. Speichern von Datenbanken
Die Verwendung von Volumes für Datenbanken hilft dabei, Daten selbst bei Neustarts und Updates des Containers zu speichern. Das ist besonders wichtig für einen zuverlässigen Betrieb in produktiven Umgebungen.
Beispiel:
In diesem Beispiel werden PostgreSQL-Daten in einem Volume db_data
gespeichert, was ihre Sicherheit bei Neustarts oder dem Entfernen des Containers garantiert.
docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres
2. Gemeinsame Datennutzung zwischen Containern
Manchmal ist es notwendig, Daten zwischen mehreren Containern zu teilen. Volumes machen das ganz einfach möglich.
Beispiel:
Wir erstellen ein Volume und starten zwei Container, die dieses Volume verwenden. Beide Container erhalten Zugriff auf die Daten im Volume shared_data
, was ihnen ermöglicht, Daten auszutauschen.
docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx
3. Entwicklung und Testen
Bei der Entwicklung von Anwendungen ist es praktisch, gebundene Verzeichnisse zu verwenden, um Quellcode zwischen dem Container und der Host-Maschine zu teilen. Das ermöglicht es Entwicklern, den Code auf dem Host zu bearbeiten, während der Container direkt mit den Updates arbeitet.
Beispiel:
In diesem Beispiel wird das Verzeichnis /path/to/source
auf der Host-Maschine im Verzeichnis /app
innerhalb des Containers dev_container
eingebunden. So kann der Container den aktuellen Quellcode direkt vom Host verwenden.
docker run -d -v /path/to/source:/app --name dev_container node
8.4 Verwaltung von Volumes
Docker bietet bequeme Befehle zur Verwaltung von Volumes, mit denen man Volumes einfach erstellen, löschen und Informationen zu ihnen abrufen kann.
1. Alle Volumes anzeigen
Dieser Befehl gibt eine Liste aller verfügbaren Volumes auf der Host-Maschine aus.
docker volume ls
2. Informationen zu einem Volume anzeigen
Mit diesem Befehl kann man detaillierte Informationen zu einem Volume my_volume
erhalten: seinen Speicherort im Host-Dateisystem sowie Informationen über Container, die dieses Volume nutzen.
docker volume inspect my_volume
3. Volume löschen
Dieser Befehl löscht das Volume my_volume
. Vor dem Löschen solltest du sicherstellen, dass das Volume nicht von einem Container verwendet wird, da der Befehl sonst fehlschlägt.
docker volume rm my_volume
8.5 Backup von Volumes
Um die Sicherheit deiner Daten zu gewährleisten, ist es wichtig, Backups von Volumes erstellen und bei Bedarf wiederherstellen zu können.
1. Backup eines Volumes
In diesem Beispiel wird der Inhalt des Volumes my_volume
in eine Datei my_volume_backup.tar.gz
archiviert, die im Verzeichnis /backup
auf der Host-Maschine gespeichert wird.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume
2. Wiederherstellung eines Volumes
Dieses Beispiel stellt den Inhalt des Volumes my_volume
aus einem Backup wieder her, das in der Datei my_volume_backup.tar.gz
gespeichert ist.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
GO TO FULL VERSION