From b03e8984d0576d5bf099f5d48d6c350bc47aeb91 Mon Sep 17 00:00:00 2001 From: piccihud Date: Sun, 25 Feb 2024 19:40:45 +0100 Subject: [PATCH] Aggiunto guida su come eseguire il backup dei container docker e dei loro volumi --- container/volumebk.md | 109 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 container/volumebk.md diff --git a/container/volumebk.md b/container/volumebk.md new file mode 100644 index 0000000..88be873 --- /dev/null +++ b/container/volumebk.md @@ -0,0 +1,109 @@ +# Backup di un container Docker + +## Backup dei dati di un container + +```bash +[15:06 Sun Feb 25]root@snikket (264):/etc/snikket + > ll +Permissions Size User Date Modified Name +drwxr-xr-x - root 25 Feb 15:06  backup +.rw-r--r-- 1.0k root 10 Jan 21:16  docker-compose.yml +.rw-r--r-- 250 root 23 Dec 2023  snikket.conf + +[15:06 Sun Feb 25]root@snikket (265):/etc/snikket + > docker ps -a +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +fb9ed97becbd snikket/snikket-web-proxy:stable "/usr/bin/tini /bin/…" 7 days ago Up 7 days snikket-proxy +658a76171366 snikket/snikket-web-portal:stable "/bin/sh /entrypoint…" 7 days ago Up 7 days (healthy) snikket-portal +e02f21267ab8 snikket/snikket-server:stable "/bin/entrypoint.sh" 7 days ago Up 7 days (healthy) snikket +35bf10b99eb4 snikket/snikket-cert-manager:stable "/usr/bin/tini /bin/…" 7 days ago Up 43 minutes snikket-certs +bcb2056929a0 hello-world "/hello" 2 months ago Exited (0) 2 months ago practical_chandrasekhar +``` + +Per ottenere la lista solo dei containerID: + +```bash + > docker container ls -q +fb9ed97becbd +658a76171366 +e02f21267ab8 +37bf10b99eb4 + +[15:11 Sun Feb 25]root@snikket (269):/etc/snikket + > docker container ls -q | xargs +fb9ed97becbd 658a76171366 e02f21267ab8 35bf10b99eb4 +``` +Quindi, come dalla documentazione: + +- commit del container +- salvare i dati dell'immagine in un archivio .tar + +```bash +[15:15 Sun Feb 25]root@snikket (273):/etc/snikket + > docker container commit fb9ed97becbd +sha256:681c6db0e0d23535b0c3fd3ec29544e462e13463a906ac646998bb0f5d30d3f4 + + +[15:15 Sun Feb 25]root@snikket (274):/etc/snikket + > docker image save -o backup/snikket-web-proxy.tar snikket/snikket-web-proxy:stable + + +[15:16 Sun Feb 25]root@snikket (275):/etc/snikket + > ll backup/ +Permissions Size User Date Modified Name +.rw------- 101M root 25 Feb 15:16  snikket-web-proxy.tar + +``` + +## Backup di un volume + +Ad esempio, creare un nuovo container denominato `dbstore`: + +```bash +docker run -v /dbdata --name dbstore ubuntu /bin/bash +``` + +Per eseguire un backup del volume `dbdata`, eseguire il seguente comando: + +```bash +docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata +``` + +Nel comando `docker run`, vengono impostate due opzioni relative ai volumi: + +* `--volumes-from dbstore`: Consente di montare automaticamente il volume definito nel container `dbstore` nel nuovo container appena creato. +* `-v $(pwd):/backup`: Permette di collegare una directory host locale nel nuovo container. In questo caso, `$(pwd)` rappresenta la directory di lavoro corrente sulla macchina host. Tutte le azioni intraprese all'interno del container relativamente a tale cartella verranno riflesse anche nella directory host. + +Oppure, meglio sarebbe utilizzare, per questo scopo, **busybox**, uno strumento software che combina molti programmi Unix essenziali in un singolo binario compatto. È molto leggero, efficiente e versatile. + + +```bash +docker run --rm --mount source=snikket_data,target=/volume-snikket-data_backup -v $(pwd):/backup busybox tar -czvf /backup/snikket-data_bk_$(date +%F).tar.gz /volume-snikket-data_backup +``` + +- `docker run`: avvia un nuovo container Docker partendo da un'immagine specificata. + +- `--rm`: rimuove automaticamente il container subito dopo la sua interruzione. + +- `--mount source=snikket_data,target=/volume-snikket-data_backup`: monta il volume `snikket_data` nel path `/volume-snikket-data_backup` del nuovo container. + +- `-v $(pwd):/backup`: monta la directory di lavoro corrente dell'host nel path `/backup` all'interno del nuovo container. + +- `busybox`: specifica l'immagine base da utilizzare per creare il container. + +- `tar -czvf /backup/snikket-data_bk_$(date +%F).tar.gz /volume-snikket-data_backup`: all'avvio del container, viene eseguito il comando `tar`, salvando il contenuto del volume `/volume-snikket-data_backup` nel file `/backup/snikket-data_bk_$(date +%F).tar.gz`, dove `$(date +%F)` rappresenta la data corrente. + +- Infine, viene rimosso il container, ma il file di backup rimane presente nella cartella di lavoro corrente: + +```bash +[15:43 Sun Feb 25]root@snikket (297):/etc/snikket/backup + > ll +Permissions Size User Date Modified Name +.rw-r--r-- 259 root 25 Feb 15:42  snikket-data_bk_2024-02-25.tar.gz +``` + +## Collegamenti + +- [https://docs.docker.com/desktop/backup-and-restore/](https://docs.docker.com/desktop/backup-and-restore/) +- [https://www.geeksforgeeks.org/backing-up-a-docker-container/](https://www.geeksforgeeks.org/backing-up-a-docker-container/) +- [https://docs.docker.com/storage/volumes/#back-up-restore-or-migrate-data-volumes](https://docs.docker.com/storage/volumes/#back-up-restore-or-migrate-data-volumes)