Docker Container Backup & Restore?
Hallo, ich habe unter Docker einen Nextcloud Container den ich gerne immer mal wieder sichern möchte, wie kann ich das am besten tun?
ich habe Nextcloud so aufgesetzt per docker compose
---
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb:10.5
container_name: nextcloud_db
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
container_name: nextcloud_app
restart: always
ports:
- 8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
---
Außerdem sind es unter Docker dann zwei Container wie folgt
1 Antwort
Da fuehren wie ueblich mehrere Wege zum Ziel.
Mein persoenlicher Vorschlag:
Du baust dir einen Sidecar Container (z.B. ein default Ubuntu/Debian/whatever) und holst dir per "--volumes-from" die Volumes deines App- und DB-Containers. Gleichzeitig holst du mir einem bind mount einen lokalen Ordner in den Sidecar Container.
Fuer die Nextcloud kannst du einfach einen der gemeinen Backup Jobs mittels tar, rsync, borg, $younameit bauen.
Fuer die DB wuerde ich aber mit nativen Tools arbeiten wie mysqldump (langsamer und ggf. blocking, braucht aber nix) oder mariabackup (schneller, non-blocking, braucht ggf. Config), da du sonst das Risiko eingehst, inkonsistente Backups zu haben.
Disclaimer: Die eigentlichen Container musst du nicht sichern, die sind in deinem Fall recht stateless, weil du die Daten in Volumes persistierst hast.
Die Daten aus dem Volume kannst du dann einfach in den bind mount wegsichern, mit tar, rsync, restic, borg usw.
wie hole ich die volumes dann in debian rüber?
Mit "--volumes-from" (https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes)
Wie sichere ich genau die DB Volumes auf den erwähnten Debian?
Mit z.B. mysqldump. Da purzelt am Ende dann auch nur ein File raus
Sagen wir mal ich habe dann alles gesichert, könnte ich dann auf der selben Maschine oder anderer Maschine Nextcloud wieder mit den Daten restoren 1 zu 1?
Ja. Du solltest halt dieselben Container Images verwenden, sonst kannst du das aber immer wieder herstellen.
docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
wie kann ich das bei meinem Nextcloud umsetzen? Einen Container namens 'dbstore' habe ich. Was muss ich nun noch ersetzen?
hast du evtl eine gute Anleitung für mysqldump?
vielen vielen Dank
Deine Container heissen ja "nextcloud_app" und "nextcloud_db". Von denen holst du die Volumes.
https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#mysqldump-syntax
Das hört sich doch nach einer guten Idee an, danke im Voraus.
Also dann wie folgt.
ich erstelle z.B. dann ein Debian Container okay
wie hole ich die volumes dann in debian rüber?
Die Nextcloud Daten würde ich dann per rsync und cronjob auf eine zweite SSD kopieren
Wie sichere ich genau die DB Volumes auf den erwähnten Debian?
Sagen wir mal ich habe dann alles gesichert, könnte ich dann auf der selben Maschine oder anderer Maschine Nextcloud wieder mit den Daten restoren 1 zu 1?