Docker 1.9.0 und höher
Verwenden Sie Volume-API
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
Dies bedeutet, dass das Datencontainermuster zugunsten der neuen Volumes aufgegeben werden muss.
Tatsächlich ist die Volume-API nur eine bessere Möglichkeit, das zu erreichen, was das Datencontainermuster war.
Wenn Sie einen Container mit einem -v volume_name:/container/fs/path
erstellen, wird Docker automatisch ein benanntes Volume für Sie erstellen, das Folgendes kann:
- Kann über das
docker volume ls
aufgelistet werden
- Kann über das
docker volume inspect volume_name
identifiziert werden
- Als normales Verzeichnis gesichert werden
- Wie zuvor über eine
--volumes-from
-Verbindung gesichert werden
Das neue Volume-API fügt einen nützlichen Befehl hinzu, mit dem Sie hängende Volumes identifizieren können:
docker volume ls -f dangling=true
Und dann entfernen Sie es durch seinen Namen:
docker volume rm
Wie @mpugach in den Kommentaren betont, können Sie alle hängenden Volumes mit einem schönen Einzeiler loswerden:
docker volume rm $(docker volume ls -f dangling=true -q)
# Oder unter Verwendung von 1.13.x
docker volume prune
Docker 1.8.x und darunter
Der Ansatz, der in der Produktion am besten zu funktionieren scheint, besteht darin, einen Datennur-Container zu verwenden.
Der Datennur-Container wird auf einem minimalen Image ausgeführt und tut tatsächlich nichts anderes, als ein Datenvolume freizugeben.
Dann können Sie einen beliebigen anderen Container ausführen, um auf die Datenvolumen des Datencontainers zuzugreifen:
docker run --volumes-from data-container some-other-container command-to-execute
- Hier erhalten Sie eine gute Vorstellung davon, wie die verschiedenen Container angeordnet sind.
- Hier gibt es einen guten Einblick, wie Volumes funktionieren.
In diesem Blog-Beitrag gibt es eine gute Beschreibung des sogenannten Container als Volumen-Musters, das den Hauptpunkt der Verwendung von Datennur-Containern klärt.
Die Docker-Dokumentation hat nun die DEFINITIVE Beschreibung des Container als Volumen/s-Musters.
Im Folgenden finden Sie das Backup/Wiederherstellungsverfahren für Docker 1.8.x und niedriger.
BACKUP:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- --rm: Entfernen Sie den Container beim Beenden
- --volumes-from DATA: Anhängen an die von dem Datencontainer freigegebenen Volumes
- -v $(pwd):/backup: Einbinden des aktuellen Verzeichnisses in den Container zum Schreiben der Tar-Datei
- busybox: ein kleines einfacheres Image - gut für schnelle Wartungsarbeiten
- tar cvf /backup/backup.tar /data: erstellt eine unkomprimierte Tar-Datei aller Dateien im /data-Verzeichnis
WIEDERHERSTELLUNG:
# Erstellen eines neuen Datencontainers
$ sudo docker run -v /data -name DATA2 busybox true
# entpacken der Backup-Dateien in das Datenvolumen des neuen Containers
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Vergleich mit dem Originalcontainer
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt
Hier ist ein interessanter Artikel von dem ausgezeichneten Brian Goff, der erklärt, warum es gut ist, dasselbe Image für einen Container und einen Datenspeichercontainer zu verwenden.