Come posso eseguire il backup di un contenitore Docker con i suoi volumi di dati?


152

Ho usato questo tutum / wordpress immagine Docker per dimostrare un sito Web Wordpress. Di recente ho scoperto che l'immagine utilizza volumi per i dati MySQL.

Quindi il problema è questo: se voglio eseguire il backup e ripristinare il contenitore, posso provare a eseguire il commit di un'immagine, quindi eliminare il contenitore e creare un nuovo contenitore dall'immagine impegnata. Ma se lo faccio, il volume viene eliminato e tutti i miei dati scompaiono.

Dev'esserci un modo semplice per eseguire il backup del mio contenitore più i suoi dati di volume, ma non riesco a trovarlo da nessuna parte.


Dai un'occhiata a questo script che ho scritto che esegue il backup di tutto in un progetto docker, inclusi volumi, immagini, configurazione, registri, file system root e container senza nome, database e altro: docker-compose-backup.sh .
Nick Sweeting,

Risposte:


142

se voglio ripristinare il contenitore, posso provare a eseguire il commit di un'immagine, quindi eliminare il contenitore e creare un nuovo contenitore dall'immagine impegnata. Ma se lo faccio, il volume viene eliminato e tutti i miei dati scompaiono

Come spiega la guida per l'utente della finestra mobile, i volumi di dati sono pensati per conservare i dati al di fuori di un file system contenitore. Ciò facilita anche la condivisione dei dati tra più contenitori.

Mentre Docker non eliminerà mai i dati nei volumi (a meno che non si elimini il contenitore associato con docker rm -v), i volumi a cui non fa riferimento alcun contenitore docker vengono chiamati volumi sospesi . Quei volumi penzolanti sono difficili da eliminare e di difficile accesso.

Ciò significa che non appena viene eliminato l'ultimo contenitore che utilizza un volume, il volume di dati diventa penzolante e il suo contenuto è difficile da accedere.

Al fine di prevenire quei volumi penzolanti, il trucco è creare un contenitore docker aggiuntivo utilizzando il volume di dati che si desidera rimanere; in modo che ci sia sempre almeno quel contenitore finestra mobile che fa riferimento al volume. In questo modo è possibile eliminare il contenitore finestra mobile che esegue l'app wordpress senza perdere la facilità di accesso al contenuto del volume di dati.

Tali contenitori sono chiamati contenitori del volume di dati .

Ci deve essere un modo semplice per eseguire il backup del mio contenitore più i dati del volume, ma non riesco a trovarlo da nessuna parte.

immagini della finestra mobile di backup

Per eseguire il backup delle immagini della finestra mobile, utilizzare il comando salva finestra mobile che produrrà un archivio tar che potrà essere utilizzato in seguito per creare una nuova immagine finestra mobile con il comando caricamento finestra mobile .

contenitori della finestra mobile di backup

È possibile eseguire il backup di un contenitore finestra mobile in diversi modi

  • eseguendo il commit di una nuova immagine finestra mobile in base allo stato corrente del contenitore finestra mobile utilizzando il comando commit finestra mobile
  • esportando il file system contenitore docker come archivio tar usando il comando export docker . In seguito è possibile creare una nuova immagine finestra mobile da quell'archivio tar con il comando di importazione finestra mobile .

Tenere presente che tali comandi eseguiranno solo il backup del file system a strati del contenitore finestra mobile. Ciò esclude i volumi di dati .

volumi di dati della finestra mobile di backup

Per eseguire il backup di un volume di dati è possibile eseguire un nuovo contenitore utilizzando il volume di cui si desidera eseguire il backup ed eseguendo il comando tar per produrre un archivio del contenuto del volume come descritto nella guida per l'utente della finestra mobile .

Nel tuo caso particolare, il volume di dati viene utilizzato per archiviare i dati per un server MySQL. Quindi, se si desidera esportare un archivio tar per questo volume, è necessario prima arrestare il server MySQL. Per fare ciò dovrai fermare il contenitore wordpress.

eseguire il backup dei dati MySQL

Un altro modo è connettersi in remoto al server MySQL per produrre un dump del database con il comando mysqldump . Tuttavia, affinché questo funzioni, il tuo server MySQL deve essere configurato per accettare connessioni remote e disporre anche di un utente autorizzato a connettersi in remoto. Questo potrebbe non essere il caso dell'immagine docker di wordpress che stai utilizzando.


modificare

Docker ha recentemente introdotto plug-in per volumi Docker che consentono di delegare la gestione dei volumi ai plug-in implementati dai fornitori.

Il docker runcomando ha un nuovo comportamento per l' -vopzione. Ora è possibile passargli un nome di volume . I volumi creati in questo modo vengono denominati e facilmente consultabili in seguito, facilitando i problemi con volumi sospesi .

Modifica 2

Docker ha introdotto il docker volume prunecomando per eliminare facilmente tutti i volumi sospesi.


34
In realtà sono più interessato a creare un contenitore che posso spostare facilmente, non capisco il punto di un contenitore che non può essere spostato.
pguardiario,

In tal caso si dovrebbe guardare a strumenti che consentono di gestire il volume di dati Docker per voi, come Flocker
Thomasleveil

9
Docker non elimina automaticamente i volumi di dati. Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container. quindi i contenitori di soli dati sono legacy
Andrii Zarubin,

2
non è necessaria una connessione remota per mysqldump. Basta sgusciare nel contenitore, scaricarlo e quindi copiarlo docker cp.
jiggunjer,

@AndriiZarubin re: Assolutamente data only container obsolete?no. Il contenitore di soli dati ti dà un contenitore per docker exec data-container tar -czf snapshot.tgz /dataallora docker cp data-container:snapshot.tgz ./snapshot.tgze simili. Se si desidera che il contenitore duri a lungo, quindi eseguire il comando in modo tail -f /dev/nullche non esca mai, utilizzando risorse minime.
Jesse Chisholm,

31

AGGIORNAMENTO 2

Script bash di backup per volume singolo non elaborato:

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

Script bash di ripristino per volume singolo non elaborato:

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

L'utilizzo può essere così:

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

I presupposti sono: il file di backup si chiama backup.tar, risiede nella stessa directory dello script di backup e ripristino, il nome del volume è lo stesso tra i contenitori.

AGGIORNARE

Mi sembra che il backupping dei volumi dai container non sia diverso dal backupping dei volumi dai container di dati.

I volumi non sono altro che percorsi collegati a un contenitore, quindi il processo è lo stesso.

Non so se il docker-backup funziona anche per gli stessi volumi di container ma è possibile utilizzare:

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

e:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

AGGIORNAMENTO FINE

È disponibile questo simpatico strumento che consente di eseguire il backup e il ripristino dei contenitori dei volumi della finestra mobile:

https://github.com/discordianfish/docker-backup

se si dispone di un contenitore collegato ad alcuni volumi contenitore come questo:

$ docker run --volumes-from=my-data-container --name my-server ...

puoi eseguire il backup di tutti i volumi in questo modo:

$ docker-backup store my-server-backup.tar my-server

e ripristina in questo modo:

$ docker-backup restore my-server-backup.tar

Oppure puoi seguire il modo ufficiale:

Come trasferire i volumi di soli dati da un host a un altro?


No, non è una situazione "--volumes-from", piuttosto i volumi sono definiti nel file docker che è ciò che impedisce ai dati di persistere. Se guardi il file docker per tutum / lampada vedrai cosa intendo.
pguardiario,

La risposta che ho già dato è buona per qualsiasi tipo di volume perché i volumi sono volumi e i contenitori sono contenitori, non c'è differenza se si utilizza un contenitore come contenitore di dati dal punto di vista dei volumi
tommasop

Il volume definito nel file docker viene distrutto quando viene distrutto il contenitore. Quindi non c'è modo di recuperare quei dati quando si sposta il contenitore.
pguardiario,

devi estrarre i dati prima di spostare il contenitore, quindi riavviare il contenitore e rimettere i dati
tommasop

1
Viene visualizzato un errore: unknown shorthand flag: 'r' in -rm.dovrebbe essere --rm? (Docker versione 18.09.5, build e8ff056)
kuga

22

Se devi solo eseguire il backup dei volumi montati, puoi semplicemente copiare le cartelle dal Dockerhost .

Nota: se sei su Ubuntu , Dockerhost è il tuo computer locale. Se sei su Mac , Dockerhost è la tua macchina virtuale.

Su Ubuntu

Puoi trovare tutte le cartelle con volumi qui: /var/lib/docker/volumes/così puoi copiarle e archiviarle dove vuoi.

Su MAC

Non è così facile come su Ubuntu. Devi copiare i file dalla VM.

Ecco uno script su come copiare tutte le cartelle con volumi dalla macchina virtuale (in cui è in esecuzione il server Docker) sulla macchina locale. Partiamo dal presupposto che la macchina virtuale docker-machine denominata predefinita .

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

Sta per creare una cartella ./backup_volumes nella directory corrente e copiare tutti i volumi in questa cartella.

Ecco uno script su come copiare tutti i volumi salvati dalla tua directory locale ( ./backup_volumes ) sulla macchina Dockerhost

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

Ora puoi verificare se funziona tramite:

docker volume ls

Dobbiamo chiudere il container per fare un backup di quella cartella /var/lib/docker/volumessotto Ubuntu?
conosce il

2
Non necessario, puoi copiare quella cartella ogni volta che vuoi.
Andrii Dvoiak,

4
Tecnicamente sì, puoi, ma sei esposto a problemi di corruzione dei dati poiché la copia non è atomica e potrebbero esserci scritture simultanee sul volume, preferirei prima arrestare il contenitore.
Alessandro S.

13

Supponiamo che il nome del tuo volume sia data_volume. È possibile utilizzare i seguenti comandi per eseguire il backup e ripristinare il volume da e verso un'immagine docker denominata data_image:

Per eseguire il backup:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

Ripristinare:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-

È un backup in tempo reale?
Kang Andrew,

2
Poiché lo stesso volume può essere montato su più finestre mobili, sì, si tratta di un backup in tempo reale. Per esempio. è possibile eseguire il backup del volume montato su un contenitore Mysql (presupponendo che non vi sia corruzione dei dati). Ma per i servizi che devono essere interrotti per paura della corruzione dei dati, no, questo non è in tempo reale.
Sahil Ahuja,

9

So che questo è vecchio, ma mi rendo conto che non esiste una soluzione ben documentata per inviare un contenitore di dati (come backup) all'hub docker. Ho appena pubblicato un breve esempio di come farlo su https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub

Di seguito è la linea di fondo

L'esercitazione docker suggerisce che è possibile eseguire il backup e ripristinare il volume di dati localmente. Utilizzeremo questa tecnica, aggiungere alcune righe in più per ottenere questo backup nell'hub docker per un facile ripristino futuro in qualsiasi posizione desideriamo. Quindi iniziamo. Questi sono i passaggi da seguire:

Eseguire il backup del volume di dati dal contenitore dati denominato contenitore dati per il backup

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

Espandi questo file tar in un nuovo contenitore in modo che possiamo impegnarlo come parte della sua immagine

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

Esegui il commit e invia l'immagine con il tag desiderato ($ VERSION)

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

Infine, consente di ripulire

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

Ora abbiamo un'immagine denominata backup dei dati nel nostro repository che è semplicemente un filesystem con i file e le cartelle di backup. Per utilizzare questa immagine (ovvero ripristinare dal backup), eseguiamo le seguenti operazioni:

Esegui il contenitore di dati con l'immagine di backup dei dati

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

Esegui la tua immagine whatEver con volumi dal data-conainter

docker run --volumes-from=data-container repo/whatEver

Questo è tutto.

Sono stato sorpreso che non ci sia documentazione per questo lavoro in giro. Spero che qualcuno lo trovi utile. So che ci ho messo un po 'a pensarci.


8

Se il tuo progetto utilizza la composizione docker, ecco un approccio per il backup e il ripristino dei volumi.

finestra mobile-compose.yml

Fondamentalmente aggiungi db-backupe db-restoreservizi al tuo file docker-compose.yml e lo adatti al nome del tuo volume. Il mio volume è chiamato dbdatain questo esempio.

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

Evita la corruzione

Per coerenza dei dati, arrestare il contenitore del database prima di eseguire il backup o il ripristino

docker-compose stop db

Backup

Per eseguire il backup sulla destinazione predefinita ( backup/dbdata.tar.bz2):

docker-compose run --rm db-backup

Oppure, se si desidera specificare un nome di destinazione alternativo, eseguire:

docker-compose run --rm -e TARGET=mybackup db-backup

Ripristino

Per ripristinare da backup/dbdata.tar.bz2, eseguire:

docker-compose run --rm db-restore

O ripristina da un file specifico usando:

docker-compose run --rm -e SOURCE=mybackup db-restore

Ho adattato i comandi da https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ per creare questo approccio.


5

Il comando seguente eseguirà tar in un contenitore con tutti i volumi di dati nominati montati e reindirizzerà l'output in un file:

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

Assicurati di testare l'archivio risultante nel caso in cui qualcosa sia andato storto:

tar -tjf data-volumes.tar.bz2

4

Se hai solo bisogno di un semplice backup in un archivio, puoi provare la mia piccola utility: https://github.com/loomchild/volume-backup

Esempio

Backup:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

archivia il volume denominato some_volumenel /tmp/archive1.tar.bz2file di archivio

Ristabilire:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

sarà pulire e ripristinare il volume chiamato some_volumedal /tmp/archive1.tar.bz2file di archivio.

Maggiori informazioni: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362


Ho creato uno strumento simile github.com/01e9/docker-backup Crea archivi di backup e li aggiunge a una directory di sincronizzazione di Resilio
Oleg

2

Ho creato uno strumento per orchestrare e avviare il backup di dati e container mysql, chiamato semplicemente docker-backup . C'è anche un'immagine pronta per l'uso sull'hub docker .

È principalmente scritto in Bash in quanto è principalmente orchestrazione. Utilizza duplicityper il motore di backup effettivo. Al momento è possibile eseguire il backup su FTP (S) e Amazon S3.

La configurazione è abbastanza semplice: scrivere in YAML un file di configurazione che descriva cosa fare il backup e dove, e qui si va!

Per i contenitori di dati, monta automaticamente i volumi condivisi dal contenitore per il backup e l'elaborazione. Per i contenitori mysql, li collega ed esegue un mysqldump in bundle con il contenitore ed elabora il risultato.

L'ho scritto perché utilizzo Docker-Cloud che non è aggiornato con le recenti versioni del motore docker e perché volevo abbracciare il modo Docker non includendo alcun processo di backup all'interno dei contenitori delle mie applicazioni.


2

Se si desidera un backup completo, è necessario eseguire alcuni passaggi:

  1. Commettere il contenitore su un'immagine
  2. Salva l'immagine
  3. Eseguire il backup del volume del contenitore creando un file tar del punto di montaggio del volume nel contenitore.
  4. Ripetere i passaggi 1-3 anche per il contenitore del database.

Si noti che l'esecuzione di un commit Docker del contenitore su un'immagine NON include i volumi allegati al contenitore (rif: documentazione di commit Docker ).

" L'operazione di commit non includerà alcun dato contenuto nei volumi montati all'interno del contenitore. "


1

Se ti piace inserire operatori arcani dalla riga di comando, adorerai queste tecniche manuali di backup dei container. Tieni presente che esiste un modo più rapido ed efficiente per il backup dei contenitori altrettanto efficace. Ho scritto le istruzioni qui: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Passaggio 1: aggiungere un host Docker a qualsiasi cloud Come spiegato in un'esercitazione sul sito di supporto di Morpheus, è possibile aggiungere un host Docker al cloud di propria scelta in pochi secondi. Inizia scegliendo Infrastruttura nella barra di navigazione principale di Morpheus. Seleziona Host nella parte superiore della finestra Infrastruttura e fai clic sul pulsante "+ Host contenitore" in alto a destra.

Per eseguire il backup di un host Docker su un cloud tramite Morpheus, vai alla schermata Infrastruttura e apri il menu "+ Host del contenitore".

Scegli un tipo di host contenitore dal menu, seleziona un gruppo, quindi inserisci i dati nei cinque campi: Nome, Descrizione, Visibilità, Seleziona un cloud e Inserisci tag (facoltativo). Fare clic su Avanti, quindi configurare le opzioni host scegliendo un piano di servizio. Notare che i campi Volume, Memoria e Conteggio CPU saranno visibili solo se il piano selezionato ha opzioni personalizzate abilitate.

Qui è dove aggiungere e dimensionare i volumi, impostare le dimensioni della memoria e il conteggio della CPU e scegliere una rete. È inoltre possibile configurare il nome utente e la password del sistema operativo, il nome di dominio e il nome host, che per impostazione predefinita è il nome del contenitore immesso in precedenza. Fare clic su Avanti, quindi aggiungere eventuali flussi di lavoro di automazione (facoltativo). Infine, rivedere le impostazioni e fare clic su Completa per salvarle.

Passaggio 2: Aggiungi l'integrazione del registro Docker a cloud pubblici o privati Adam Hicks descrive in un altro tutorial di Morpheus quanto sia semplice integrarsi con un registro Docker privato. (Non è necessaria alcuna configurazione aggiuntiva per utilizzare Morpheus per eseguire il provisioning delle immagini con l'hub pubblico di Docker utilizzando l'API Docker pubblica.)

Seleziona Integrazioni nella scheda Ammin. Della barra di navigazione principale, quindi scegli il pulsante "+ Nuova integrazione" sul lato destro dello schermo. Nella finestra Integrazione visualizzata, selezionare Docker Repository nel menu a discesa Tipo, immettere un nome e aggiungere l'endpoint dell'API del registro privato. Fornire un nome utente e una password per il registro in uso e fare clic sul pulsante Salva modifiche.

Integra un registro Docker con un cloud privato tramite la finestra di dialogo "Nuova integrazione" di Morpheus.

Per eseguire il provisioning dell'integrazione appena creata, selezionare Docker in Tipo nella finestra di dialogo Crea istanza, selezionare il registro nel menu a discesa Registro Docker nella scheda Configura, quindi continuare il provisioning come si farebbe con qualsiasi contenitore Docker.

Passaggio 3: Gestire i backup Dopo aver aggiunto l'host Docker e aver integrato il registro, un backup verrà configurato ed eseguito automaticamente per ogni istanza fornita. Il supporto Morpheus fornisce istruzioni per visualizzare i backup, creare un backup dell'istanza e creare un backup del server.


0

Se hai un caso semplice come il mio, puoi fare quanto segue:

  1. Crea un file Docker che estende l'immagine di base del tuo contenitore
  2. Suppongo che i tuoi volumi siano mappati sul tuo filesystem, quindi puoi semplicemente aggiungere quei file / cartelle alla tua immagine usando ADD folder destination
  3. Fatto!

Ad esempio, supponendo di avere i dati dai volumi nella directory home, ad esempio /home/mydataè possibile eseguire quanto segue:

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

Dove il DOCKERFILE punta a un file come questo:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <example@gmail.com>

WORKDIR /opt/data
ADD mydata .

Il resto del materiale è ereditato dall'immagine di base. Ora puoi inviare quell'immagine al cloud docker e i tuoi utenti avranno i dati disponibili direttamente sui loro contenitori


qual è il punto nell'uso di un volume se alla fine lo vuoi solo inserire nell'immagine.
jiggunjer,

@jiggunjer con un volume ti consente di sovrascrivere i dati nel contenitore
Danielo515

Posso ignorare i dati anche senza un volume, usando docker cp.
jiggunjer,

0

Il problema : si desidera eseguire il backup del contenitore di immagini CON i volumi di dati al suo interno ma questa opzione non è pronta all'uso, il modo semplice e banale sarebbe copiare il percorso dei volumi e fare il backup dell'immagine della finestra mobile 'ricaricarlo e collegarlo entrambi insieme. ma questa soluzione sembra essere maldestra, non sostenibile e mantenibile - Dovresti creare un cron job che farebbe scorrere questo flusso ogni volta.

Soluzione : utilizzando dockup - Immagine Docker per eseguire il backup dei volumi del contenitore Docker e caricarlo su s3 (Docker + Backup = dockup). dockup utilizzerà le tue credenziali AWS per creare un nuovo bucket con nome come da variabile d'ambiente, ottiene i volumi configurati e sarà tarballato, gzip, timestamp e caricato nel bucket S3.

Passaggi :

  1. configura docker-compose.ymle allega il env.txtfile di configurazione, I dati devono essere caricati su un bucket s3 sicuro dedicato e pronti per essere ricaricati sulle esecuzioni DRP. per verificare quale percorso dei volumi configurare configurare eseguire docker inspect <service-name>e individuare i volumi :

"Volumes": {"/ etc / service-example": {}, "/ service-example": {}},

  1. Modifica il contenuto del file di configurazione env.txte posizionalo sul percorso del progetto:

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. Esegui il contenitore dockup

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. Successivamente verifica che il tuo bucket S3 contenga i dati rilevanti

-1

Questo è un modo per il backup di cartelle di volumi.
Se si dispone del registro docker infra, questo metodo è molto utile.
Questo utilizza il registro docker per spostare facilmente il file zip.

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

In un altro server

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

Esegui l'immagine che utilizza questa cartella del volume.
Puoi creare facilmente un'immagine che ha sia un'immagine di esecuzione che un file zip di volume.
Ma non lo consiglio per vari motivi (dimensioni dell'immagine, comando di immissione, ..).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.