Backup e restore di volumi

Backup di Volume

Backup di un volume condiviso in un file tar

Creare la directory che ospiterà il tar:

mkdir backup

Lanciare un contenitore temporaneo:

docker run -d --rm \
  -v myvol:/usr/share/nginx/html \
  -v $PWD/backup:/backup ubuntu \
  bash -c "cd /usr/share/nginx/html \
           && tar cvf /backup/myvol.tar ."

Si monta il volume

-v myvol:/usr/share/nginx/html

Si mappa la directory in cui viene prodotto il tar

-v $PWD/backup:/backup

Non si può usare ./backup perchè deve essere un percorso assoluto

Si esegue una shell bash passando il comando che va nella directory coi dati presi dal volume condiviso

cd /usr/share/nginx/html

ed esegue il tar

tar cvf /backup/myvol.tar .

Al termine del comando il contenitore termina e viene rimosso

Restore di Volume

Restore da un file tar

Creazione di un volume persistente:

docker volume create myvol1

Un contenitore temporaneo che compie il restore:

docker run -d --rm \
  -v myvol1:/usr/share/nginx/html \
  -v $PWD/backup:/backup ubuntu \
  bash -c "cd /usr/share/nginx/html \
           && tar xvf /backup/myvol.tar"

Il file è estratto e va anche nel volume myvol1

Il contenitore ubuntu termina ma il volume dati persiste

Verifica: lanciare un contenitore che usa il volume dati:

docker run -d --name web_server -v myvol1:/usr/share/nginx/html -p 8080:80 nginx

Verificare col browser a localhost:8080

Utility esterna

Scaricare l’immagine:

docker pull loomchild/volume-backup

Esempio di backup di volume:

docker run -v myvol:/volume --rm loomchild/volume-backup backup - > myvol.tar.bz2
  • Il file è compresso con bzip2
  • Il volume non deve al momento essere in uso da nessun contenitore processo

Esempio di restore di volume

Creare un volume destinazione, deve essere vuoto:

docker volume create myvol1

Eseguire il restore:

cat myvol.tar.bz2 | docker run -i -v myvol1:/volume --rm loomchild/volume-backup restore -

Verificare con:

docker run -d --name web_server -v myvol1:/usr/share/nginx/html -p 8080:80 nginx

docker prune

Rimuove oggetti di docker che non sono al momento in uso da parte di nessun contenitore di processo

  • Non vi è nessun contenitore processi attivo che in questo momento usa l’oggetto
  • Chiede conferma

Può essere molto pericoloso

  • docker volume prune - rimuove i volumi persistenti non in uso

Meglio usare: docker volume rm nome - il solo volume col nome

  • docker network prune - rimuove le reti non in uso

Meglio usare: docker network rm nome - la sola rete col nome

  • docker image prune - rimuove le immagini non in uso

Meglio usare: docker image rm nome - la sola immagine col nome