Backup dei container docker wordpress creati con immagine ufficiale

June 25, 2017 0 Comments Docker

In questa piccola guida impareremo come fare il backup di un container docker wordpress che non utilizza i Volumi, ma tiene i dati dentro se stesso (cosa altamente sconsigliata).

Facciamo l’esempio con un container generico creato con il nome nome-wordpress

Questa immagine creerà un volume interno dei dati /var/www/html/

Per poter vedere i dati dei volumi collegati dobbiamo utilizzare il comando inspect:

docker inspect nome-wordpress  

come si può vedere dall'output i dati sono in /var/www/html .

Ci sono due fasi, la prima si salva il docker container , se ci sono state fatte modifiche particolari, pacchetti php installati o configurazioni ad hoc.

Per trovare l'id bisogna usare docker ps -a

Quindi, procederemo ad eseguire il commit in locale del container, per poi poterlo salvare in un archvio.

docker commit -p IDDELCONTAINER nome-wordpress:backup  

nome-wordpress sarà il nome dell'immagine salvata, :backup sarà il tag che andremo ad usare

dopodichè lo si salva in un file facendo

docker save nome-wordpress:backup | gzip > nome-wordpress_backup.tar.gz  

Nel file nome-wordpress_backup.tar.gz avremo il backup del container in esecuzione, ma senza dati.

Per poter salvare i dati che sono dentro al container in /var/www/html/ bisogna utilizzare un piccolo container di supporto : busybox

Di seguito i parametri:

  • $(pwd) significa che mappiamo la directory corrente alla directory scritta dopo i : del container
  • /backups è la directory dentro al container busyboxy
  • —-rm è il parametro che indica che dopo aver eseguito il comando tar -c /var/www/html -f /backups/html_nome-wordpress.tar il container creato sarà distrutto
docker run --rm -v $(pwd):/backups --volumes-from=nome-wordpress busybox tar -c /var/www/html -f /backups/html_nome-wordpress.tar  

RESTORE IN UN ALTRA MACCHINA

La procedura qui dovrebbe essere un pò più semplice. Una volta che ci si è copiati i due tar, l'immagine del container nome-wordpress e i dati, bisogna procedere all'import.

Per prima cosa dobbiamo caricare in locale l'immagine del container

docker load < nome-wordpress_backup.tar.gz  

In questo modo facendo il comando

docker images  

Avremo in output una entry con il nome dell'immagine caricata

# output

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE  
nome-wordpress            backup              3915f4713629        About an hour ago   419 MB  

Possiamo quindi ricreare e lanciare il container dall'immagine

docker run --name nome-wordpress-nuova-istanza -p 8080:80 -d nome-wordpress:backup  

Facendo quindi il listing dei container avviati avremo:

docker images

# output

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                  NAMES  
874bca63408e        nome-wordpress:backup   "docker-entrypoint..."   25 seconds ago      Up 23 seconds       0.0.0.0:8080->80/tcp   nome-wordpress-nuova-istanza  

Questo container avrà tutte le personalizzazioni dei servizi e altre configurazioni fatte in precedenza, ma non i dati del sito vecchio.

Per reimportare i dati ci faremo aiutare da un container di supporto busybox come per il backup, dove invece di eseguire il comando di salvataggio, eseguiremo il comando di estrazione tar -xvf /backups/html_nome-wordpress.tar -C / .

Ipotizziamo di essere nella stessa cartella dove abbiamo copiato i due tar

docker run --rm -v $(pwd):/backups --volumes-from=nome-wordpress-nuova-istanza busybox tar -xvf /backups/html_nome-wordpress.tar -C /  

In questo modo abbiamo ripristinato il container e i dati inclusi!

Samuele Chiocca
Padova, italy Website