Docker 1.9.0 und höher
Verwenden Sie die Volume-API
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
Dies bedeutet, dass das Nur-Daten-Containermuster zugunsten der neuen Volumes aufgegeben werden muss.
Tatsächlich ist die Volumen-API nur ein besserer Weg, um das Datencontainer-Muster zu erreichen.
Wenn Sie einen Container mit einem -v volume_name:/container/fs/path
Docker erstellen, wird automatisch ein benanntes Volume für Sie erstellt, das:
- Seien Sie durch die gelistet
docker volume ls
- Durch die identifiziert werden
docker volume inspect volume_name
- Als normales Verzeichnis gesichert
- Nach wie vor über eine
--volumes-from
Verbindung gesichert
Die neue Volume-API fügt einen nützlichen Befehl hinzu, mit dem Sie baumelnde Volumes identifizieren können:
docker volume ls -f dangling=true
Und dann entfernen Sie es durch seinen Namen:
docker volume rm <volume name>
Wie @mpugach in den Kommentaren unterstreicht, können Sie alle baumelnden Bände mit einem schönen Einzeiler entfernen:
docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune
Docker 1.8.x und darunter
Der Ansatz, der für die Produktion am besten zu funktionieren scheint, ist die Verwendung eines Nur-Daten-Containers .
Der Nur-Daten-Container wird auf einem Barebone-Image ausgeführt und führt nur ein Datenvolumen aus.
Anschließend können Sie einen beliebigen anderen Container ausführen, um Zugriff auf die Datencontainervolumes zu erhalten:
docker run --volumes-from data-container some-other-container command-to-execute
- Hier können Sie sich ein gutes Bild von der Anordnung der verschiedenen Container machen.
- Hier gibt es einen guten Einblick in die Funktionsweise von Volumes.
In diesem Blog-Beitrag gibt es eine gute Beschreibung des sogenannten Containers als Volumenmuster, die den Hauptpunkt verdeutlicht, dass nur Datencontainer vorhanden sind .
Die Docker-Dokumentation enthält jetzt die DEFINITIVE Beschreibung des Containers als Volume / s- Muster.
Im Folgenden wird das Sicherungs- / Wiederherstellungsverfahren für Docker 1.8.x und niedriger beschrieben.
SICHERUNG:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- --rm: Entferne den Container beim Verlassen
- --volumes-from DATA: Wird an die vom DATA-Container gemeinsam genutzten Volumes angehängt
- -v $ (pwd): / backup: bind mounte das aktuelle Verzeichnis in den Container; um die TAR-Datei zu schreiben
- Busybox: Ein kleines, einfacheres Bild - gut für eine schnelle Wartung
- tar cvf /backup/backup.tar / data: Erstellt eine unkomprimierte tar-Datei aller Dateien im Verzeichnis / data
WIEDERHERSTELLEN:
# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt
Hier ist ein schöner Artikel von Brian Goff, der erklärt, warum es gut ist, dasselbe Bild für einen Container und einen Datencontainer zu verwenden.