Daten von Docker Containern sichern
Veröffentlicht in Blog.
Als ich nach einer Möglichkeit suchte, von Docker die sogenannten named volumes
zu sichern, musste ich zu meiner Überraschung feststellen, dass es keine Standardmethode für diesen Prozess gibt. In der offiziellen Dokumentation gibt es nur einen Hinweis auf die Verwendung von data volume containern und eine Option --volumes-from
. Es gibt auch noch den Docker cp
-Befehl, aber er erfordert, dass man den Pfad verwendet, der innerhalb des Containers benutzt wird, was ihn weniger generisch macht.
Nach ein wenig Recherche stellte sich heraus, dass es eigentlich recht einfach ist, volumes
mithilfe von volume mounts
und einem tar
-Dienstprogramm zu sichern. Um zum Beispiel wordpress_data
nach /tmp/wordpress_archive.tar.bz2
zu sichern, kann man einfach folgendes ausführen:
docker run --rm -v wordpress_data:/volume -v /tmp:/backup alpine tar -cjf /backup/wordpress_archive.tar.bz2 -C /volume ./
Erklärung:
docker run --rm
startet einen Container, der sich nach Beendigung selbst löscht.-v wordpress_data:/volume
verbindet das Volume unserer WordPressinstallation mit dem neuen Container-v /tmp:/backup
verbindet das lokale Verzeichnis/tmp
mit dem Verzeichnis/backup
im Containeralpine
ist das Image, welches wir verwendentar -cjf /backup/wordpress_archive.tar.bz2 -C /volume ./
ist das Kommando welches ein Archiv von unseren Daten erzeugt
Wenn tar
mit dem archivieren fertig ist, löscht sich der Container von selbst und in /tmp
liegt unsere Backupdatei.
Um die Daten wieder herzustellen, muss man folgendes ausführen:
docker run --rm -v wordpress_data:/volume -v /tmp:/backup alpine sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/wordpress_archive.tar.bz2"
Erklärung:
docker run --rm
startet einen Container, der sich nach Beendigung selbst löscht.-v wordpress_data:/volume
verbindet das Volume unserer WordPressinstallation mit dem neuen Container-v /tmp:/backup
verbindet das lokale Verzeichnis/tmp
mit dem Verzeichnis/backup
im Containeralpine
ist das Image, welches wir verwendensh -c
starte ein shell und führe folgenden, durch Semikolon getrennte Kommandos ausrm -rf /volume/* /volume/..?* /volume/.[!.]* ;
hiermit löschen wir alle Dateien, inklusive der versteckten, innerhalb des verbundenen Zielordnerstar -C /volume/ -xjf /backup/wordpress_archive.tar.bz2
um anschließend das Archiv im Zielordner zu entpacken
Hinweis: Als Vorsichtsmaßnahme empfehle ich Ihnen, alle Container zu stoppen, die den zu sichernden oder wiederherzustellenden Datenträger verwenden, da sonst ein inkonsistenter Zwischenzustand archiviert oder wiederhergestellt werden könnte.