Como posso fazer backup de um contêiner do Docker com seus volumes de dados?

152

Eu tenho usado este tutum / wordpress do Docker-image para demonstrar um site do Wordpress. Recentemente, descobri que a imagem usa volumes para os dados do MySQL.

Portanto, o problema é o seguinte: Se eu quiser fazer backup e restaurar o contêiner, posso tentar confirmar uma imagem, depois excluir o contêiner e criar um novo contêiner a partir da imagem confirmada. Mas se eu fizer isso, o volume será excluído e todos os meus dados desaparecerão.

Deve haver uma maneira simples de fazer backup do meu contêiner, além dos dados de volume, mas não consigo encontrá-lo em nenhum lugar.

pguardiario
fonte
Confira este script que escrevi que faz backup absolutamente de tudo em um projeto do docker, incluindo volumes nomeados e não nomeados, imagens, configurações, logs, sistema de arquivos raiz do contêiner, bancos de dados e muito mais: docker-compose-backup.sh .
Nick Sweeting

Respostas:

141

se eu quiser reverter o contêiner, posso tentar confirmar uma imagem e depois excluir o contêiner e criar um novo contêiner a partir da imagem confirmada. Mas se eu fizer isso, o volume será excluído e todos os meus dados desaparecerão

Como o manual do usuário do docker explica, os volumes de dados devem persistir dados fora de um sistema de arquivos de contêiner. Isso também facilita o compartilhamento de dados entre vários contêineres.

Embora o Docker nunca exclua dados em volumes (a menos que você exclua o contêiner associado docker rm -v), os volumes que não são referenciados por nenhum contêiner do Docker são chamados de volumes pendentes . Esses volumes pendentes são difíceis de se livrar e de acessar.

Isso significa que, assim que o último contêiner usando um volume é excluído, o volume de dados fica oscilando e seu conteúdo fica difícil de acessar.

Para evitar esses volumes pendentes, o truque é criar um contêiner de docker adicional usando o volume de dados que você deseja permanecer; para que sempre haja pelo menos esse contêiner de docker que faça referência ao volume. Dessa forma, você pode excluir o contêiner do docker executando o aplicativo wordpress sem perder a facilidade de acesso ao conteúdo do volume de dados.

Esses contêineres são chamados de contêineres de volume de dados .

Deve haver uma maneira simples de fazer backup do meu contêiner, além dos dados de volume, mas não consigo encontrá-los em nenhum lugar.

imagens da janela de encaixe

Para fazer backup de imagens do docker, use o comando docker save, que produzirá um arquivo tar que poderá ser usado posteriormente para criar uma nova imagem do docker com o comando docker load .

contêineres de docker de backup

Você pode fazer backup de um contêiner de docker de diferentes maneiras

  • confirmando uma nova imagem do docker com base no estado atual do contêiner do docker usando o comando docker commit
  • exportando o sistema de arquivos do contêiner do docker como um arquivo tar usando o comando docker export . Posteriormente, é possível criar uma nova imagem do docker a partir desse arquivo tar com o comando docker import .

Esteja ciente de que esses comandos farão backup apenas do sistema de arquivos em camadas do contêiner do docker. Isso exclui os volumes de dados .

volumes de dados da janela de encaixe de backup

Para fazer backup de um volume de dados, é possível executar um novo contêiner usando o volume que você deseja fazer backup e executar o comando tar para produzir um archive do conteúdo do volume, conforme descrito no guia do usuário da janela de encaixe .

No seu caso particular, o volume de dados é usado para armazenar os dados para um servidor MySQL. Portanto, se você deseja exportar um arquivo tar para este volume, será necessário parar o servidor MySQL primeiro. Para fazer isso, você terá que parar o contêiner do wordpress.

faça backup dos dados do MySQL

Uma outra maneira é conectar-se remotamente ao servidor MySQL para produzir um despejo de banco de dados com o comando mysqldump . Entretanto, para que isso funcione, seu servidor MySQL deve estar configurado para aceitar conexões remotas e também ter um usuário com permissão para se conectar remotamente. Pode não ser o caso da imagem do docker wordpress que você está usando.


Editar

O Docker apresentou recentemente os plugins de volume do Docker que permitem delegar a manipulação de volumes aos plug-ins implementados pelos fornecedores.

O docker runcomando tem um novo comportamento para a -vopção. Agora é possível passar para ele um nome de volume . Os volumes criados dessa maneira são nomeados e fáceis de referenciar posteriormente, facilitando os problemas com volumes pendentes .

Editar 2

O Docker introduziu o docker volume prunecomando para excluir todos os volumes pendentes facilmente.

Thomasleveil
fonte
34
Na verdade, estou mais interessado em criar um contêiner que possa ser movido facilmente, não entendo o ponto de um contêiner que não pode ser movido.
Pguardiario 13/10
Nesse caso, você deve examinar as ferramentas que ajudam a gerenciar o volume de dados do Docker, como Flocker
Thomasleveil
9
O Docker não está excluindo volumes de dados automaticamente. 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. assim os dados são apenas recipientes legado
Andrii Zarubin
2
você não precisa de uma conexão remota para o mysqldump. Apenas descasque no recipiente, despeje-o e copie-o com docker cp.
jiggunjer 1/04
@AndriiZarubin re: data only container obsolete?Nem um pouco. O contêiner somente de dados fornece um contêiner para docker exec data-container tar -czf snapshot.tgz /dataentão docker cp data-container:snapshot.tgz ./snapshot.tgze similares. Se você deseja que o contêiner tenha vida longa, faça com que seu comando pareça tail -f /dev/nullque nunca sai, usando recursos mínimos.
Jesse Chisholm
31

ATUALIZAÇÃO 2

Script de bash de backup de volume único bruto:

#!/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 de bash de restauração de volume único bruto:

#!/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

O uso pode ser assim:

$ 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

As premissas são: o arquivo de backup é denominado backup.tar, reside no mesmo diretório do script de backup e restauração, o nome do volume é o mesmo entre os contêineres.

ATUALIZAR

Parece-me que fazer backup de volumes de contêineres não é diferente de fazer backup de volumes de contêineres de dados.

Os volumes nada mais são do que caminhos vinculados a um contêiner, portanto, o processo é o mesmo.

Não sei se o docker-backup também funciona para os mesmos volumes de contêiner, mas você pode usar:

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

FIM DE ATUALIZAÇÃO

Existe uma boa ferramenta disponível que permite fazer backup e restaurar contêineres de volumes de docker:

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

se você tiver um contêiner vinculado a alguns volumes de contêineres como este:

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

você pode fazer backup de todos os volumes como este:

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

e restaure assim:

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

Ou você pode seguir o caminho oficial:

Como portar volumes somente de dados de um host para outro?

tommasop
fonte
Não, não é uma situação "--volumes-from", mas os volumes são definidos no dockerfile, que é o que faz com que os dados não persistam. Se você olhar o arquivo docker para tutum / lamp , verá o que quero dizer.
Pguardiario 13/10
A resposta eu já dei é bom para qualquer tipo de volume de porque os volumes são volumes e recipientes são os recipientes não há diferença se você usar um recipiente como um recipiente de dados a partir de uma perspectiva de volumes
tommasop
O volume definido no arquivo docker é destruído quando o contêiner é destruído. Portanto, não há como recuperar esses dados quando você move o contêiner.
pguardiario 14/10
você tem que obter os dados antes de mover o recipiente, em seguida, relançar o recipiente e colocar a parte de trás de dados
tommasop
1
Eu recebo um erro: unknown shorthand flag: 'r' in -rm.deveria ser --rm? (Versão do Docker 18.09.5, compilação e8ff056)
kuga
22

Se você só precisar fazer backup de volumes montados, poderá copiar pastas do Dockerhost .

Nota: Se você estiver no Ubuntu , o Dockerhost é sua máquina local. Se você estiver no Mac , o Dockerhost é sua máquina virtual.

No Ubuntu

Você pode encontrar todas as pastas com volumes aqui: /var/lib/docker/volumes/para copiá-las e arquivar onde quiser.

No MAC

Não é tão fácil quanto no Ubuntu. Você precisa copiar arquivos da VM.

Aqui está um script de como copiar todas as pastas com volumes da máquina virtual (onde o servidor Docker está sendo executado) para a sua máquina local. Assumimos que sua VM da máquina de encaixe denominada padrão .

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

Ele criará uma pasta ./backup_volumes em seu diretório atual e copiará todos os volumes para essa pasta.

Aqui está um script de como copiar todos os volumes salvos do diretório local ( ./backup_volumes ) na máquina 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

Agora você pode verificar se funciona por:

docker volume ls
Andrii Dvoiak
fonte
Precisamos desligar o contêiner para fazer um backup dessa pasta /var/lib/docker/volumesno Ubuntu?
Onknows 19/09/16
2
Não é necessário. Você pode copiar essa pasta a qualquer momento.
Andrii Dvoiak
4
Tecnicamente sim, você pode, mas está exposto a problemas de corrupção de dados, pois a cópia não é atômica e pode haver gravações simultâneas no volume. Prefiro parar o contêiner primeiro.
Alessandro S.
13

Digamos que seu nome de volume seja data_volume. Você pode usar os seguintes comandos para fazer backup e restaurar o volume de e para uma imagem da janela de encaixe denominada data_image:

Para fazer 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

Restaurar:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-
Sahil Ahuja
fonte
É um backup em tempo real?
Kang Andrew
2
Como o mesmo volume pode ser montado em várias janelas de encaixe, sim, esse é um backup em tempo real. Por exemplo. É possível fazer backup do volume montado em um contêiner Mysql (assumindo que não há corrupção de dados). Mas para serviços que precisam ser interrompidos por medo de corrupção de dados, não, isso não é em tempo real.
Sahil Ahuja
9

Sei que isso é antigo, mas percebo que não há uma solução bem documentada para enviar um contêiner de dados (como backup) ao hub do docker. Acabei de publicar um pequeno exemplo de como fazê-lo em https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub

A seguir, a linha inferior

O tutorial do docker sugere que você pode fazer backup e restaurar o volume de dados localmente. Vamos usar essa técnica; adicione mais algumas linhas para que esse backup seja enviado ao hub do docker para facilitar a futura restauração em qualquer local que desejemos. Então vamos começar. Estes são os passos a seguir:

Faça backup do volume de dados do contêiner de dados denominado data-container-to-backup

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

Expanda esse arquivo tar para um novo contêiner para que possamos enviá-lo como parte de sua imagem

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

Confirme e envie a imagem com a tag desejada ($ VERSION)

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

Finalmente, vamos limpar

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

Agora, temos uma imagem chamada backup de dados em nosso repositório que é simplesmente um sistema de arquivos com os arquivos e pastas de backup. Para usar esta imagem (também conhecida como restauração do backup), fazemos o seguinte:

Execute o contêiner de dados com a imagem de backup de dados

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

Execute sua imagem whatEver com volumes do contêiner de dados

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

É isso aí.

Fiquei surpreso por não haver documentação para esse trabalho. Espero que alguém ache isso útil. Eu sei que demorei um tempo para pensar sobre isso.

z-star
fonte
8

Se o seu projeto usa docker-compose, aqui está uma abordagem para fazer backup e restaurar seus volumes.

docker-compose.yml

Basicamente, você adiciona db-backupe db-restorepresta serviços de manutenção ao seu arquivo docker-compose.yml e adapta-o ao nome do seu volume. Meu volume é nomeado dbdataneste exemplo.

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"

Evite a corrupção

Para obter consistência dos dados, pare o contêiner db antes de fazer backup ou restaurar

docker-compose stop db

Fazendo backup

Para fazer backup no destino padrão ( backup/dbdata.tar.bz2):

docker-compose run --rm db-backup

Ou, se você desejar especificar um nome de destino alternativo, faça:

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

Restaurando

Para restaurar de backup/dbdata.tar.bz2, faça:

docker-compose run --rm db-restore

Ou restaure a partir de um arquivo específico usando:

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

Adaptei os comandos de https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ para criar essa abordagem.

jdhildeb
fonte
5

O comando a seguir executará o tar em um contêiner com todos os volumes de dados nomeados montados e redirecionará a saída para um arquivo:

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

Certifique-se de testar o arquivo resultante, caso algo dê errado:

tar -tjf data-volumes.tar.bz2
Konrad
fonte
4

Se você precisar apenas de um backup simples de um arquivo, tente o meu pequeno utilitário: https://github.com/loomchild/volume-backup

Exemplo

Cópia de segurança:

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

arquivará o volume nomeado some_volumepara/tmp/archive1.tar.bz2 arquivar o arquivo

Restaurar:

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

vai limpar e restaurar o volume chamado some_volumede /tmp/archive1.tar.bz2arquivo.

Mais informações: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362

filho de tear
fonte
Eu criei uma ferramenta semelhante github.com/01e9/docker-backup Ele cria arquivos de backup e os adiciona ao diretório de um Resilio sync
Oleg
2

Eu criei uma ferramenta para orquestrar e iniciar o backup de contêineres de dados e mysql, simplesmente chamado de docker-backup . Existe até uma imagem pronta para uso no hub do docker .

É escrito principalmente em Bash, pois é principalmente orquestração. Ele é usado duplicitypara o mecanismo de backup real. No momento, você pode fazer backup no FTP (S) e Amazon S3.

A configuração é bastante simples: escreva um arquivo de configuração no YAML descrevendo o que fazer backup e onde, e aqui está!

Para contêineres de dados, ele monta automaticamente os volumes compartilhados pelo seu contêiner para fazer backup e processá-lo. Para contêineres mysql, ele os vincula e executa um mysqldump empacotado com seu contêiner e processa o resultado.

Eu o escrevi porque uso o Docker-Cloud, que não está atualizado com as versões recentes do mecanismo do docker e porque queria adotar o caminho do Docker, não incluindo nenhum processo de backup nos contêineres dos aplicativos.

Arnaud de Mouhy
fonte
2

Se você deseja um backup completo, precisará executar algumas etapas:

  1. Confirme o contêiner em uma imagem
  2. Salve a imagem
  3. Faça backup do volume do contêiner criando um arquivo tar do ponto de montagem do volume no contêiner.
  4. Repita as etapas 1 a 3 para o contêiner do banco de dados também.

Observe que fazer apenas uma confirmação do Docker do contêiner em uma imagem NÃO inclui volumes anexados ao contêiner (ref: documentação de confirmação do Docker ).

" A operação de confirmação não incluirá nenhum dado contido nos volumes montados dentro do contêiner. "

eaglet3d
fonte
1

Se você gosta de inserir operadores misteriosos na linha de comando, vai adorar essas técnicas manuais de backup de contêiner. Lembre-se de que existe uma maneira mais rápida e eficiente de fazer backup de contêineres com a mesma eficácia. Eu escrevi instruções aqui: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Etapa 1: adicionar um host do Docker a qualquer nuvem Como explicado em um tutorial no site de suporte do Morpheus, você pode adicionar um host do Docker à nuvem de sua escolha em questão de segundos. Comece escolhendo Infraestrutura na barra de navegação principal do Morpheus. Selecione Hosts na parte superior da janela Infraestrutura e clique no botão "+ Container Hosts" no canto superior direito.

Para fazer backup de um host do Docker em uma nuvem via Morpheus, navegue até a tela Infraestrutura e abra o menu "+ Hosts de contêiner".

Escolha um tipo de host de contêiner no menu, selecione um grupo e insira os dados nos cinco campos: Nome, Descrição, Visibilidade, Selecione uma Nuvem e Digite Tags (opcional). Clique em Avançar e, em seguida, configure as opções do host escolhendo um plano de serviço. Observe que os campos Volume, Memória e Contagem de CPU estarão visíveis apenas se o plano que você selecionar tiver opções personalizadas ativadas.

Aqui é onde você adiciona e dimensiona volumes, define o tamanho da memória e a contagem de CPU e escolhe uma rede. Você também pode configurar o nome de usuário e a senha do SO, o nome de domínio e o nome do host, que por padrão é o nome do contêiner que você inseriu anteriormente. Clique em Avançar e adicione quaisquer fluxos de trabalho de automação (opcional). Por fim, revise suas configurações e clique em Concluir para salvá-las.

Etapa 2: Adicionar a integração do registro do Docker às nuvens públicas ou privadas Adam Hicks descreve em outro tutorial do Morpheus como é simples integrar-se a um registro do Docker privado. (Nenhuma configuração adicional é necessária para usar o Morpheus para provisionar imagens com o hub público do Docker usando a API pública do Docker.)

Selecione Integrações na guia Administrador da barra de navegação principal e, em seguida, escolha o botão "+ Nova integração" no lado direito da tela. Na janela Integração exibida, selecione Repositório do Docker no menu suspenso Tipo, digite um nome e adicione o terminal da API do registro privado. Forneça um nome de usuário e senha para o registro que você está usando e clique no botão Salvar alterações.

Integre um Docker Registry a uma nuvem privada por meio da caixa de diálogo Morpheus "New Integration".

Para provisionar a integração que você acabou de criar, escolha Docker em Tipo na caixa de diálogo Criar instância, selecione o registro no menu suspenso Registro do Docker na guia Configurar e continue o provisionamento como faria com qualquer contêiner do Docker.

Etapa 3: gerenciar backups Depois de adicionar o host do Docker e integrar o registro, um backup será configurado e executado automaticamente para cada instância que você provisionar. O suporte ao Morpheus fornece instruções para visualizar backups, criar um backup de instância e criar um backup do servidor.

thelefty07
fonte
0

Se você tem um caso tão simples quanto o meu, pode fazer o seguinte:

  1. Crie um Dockerfile que estenda a imagem base do seu contêiner
  2. Eu assumo que seus volumes estão mapeados para o seu sistema de arquivos, para que você possa adicionar esses arquivos / pastas à sua imagem usando ADD folder destination
  3. Feito!

Por exemplo, supondo que você possua os dados dos volumes no diretório inicial, por exemplo, /home/mydatavocê pode executar o seguinte:

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

Onde seu DOCKERFILE aponta para um arquivo como este:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <[email protected]>

WORKDIR /opt/data
ADD mydata .

O restante do material é herdado da imagem base. Agora você pode enviar essa imagem para a docker cloud e seus usuários terão os dados disponíveis diretamente em seus contêineres

Danielo515
fonte
qual é o sentido de usar um volume, se você quiser inseri-lo na imagem eventualmente?
jiggunjer
@jiggunjer ter um volume permite substituir os dados no contêiner
Danielo515
Também posso substituir dados sem volume, usando docker cp.
jiggunjer
0

O problema : você deseja fazer backup do contêiner de imagem COM os volumes de dados, mas essa opção não está pronta para uso, a maneira mais direta e trivial seria copiar o caminho dos volumes e fazer backup da imagem do docker 'recarregue-a e vincule-a ambos juntos. mas essa solução parece ser desajeitada e não sustentável e sustentável - Você precisaria criar um trabalho cron que faria esse fluxo cada vez.

Solução : Usando o dockup - imagem do Docker para fazer backup dos volumes do contêiner do Docker e carregá-lo no s3 (Docker + Backup = dockup). O dockup usará suas credenciais da AWS para criar um novo bucket com o nome de acordo com a variável de ambiente, obtém os volumes configurados e será compactado, compactado com zíper, com registro de data e hora e carregado no bucket S3.

Passos :

  1. configure docker-compose.ymle anexe o env.txtarquivo de configuração a ele. Os dados devem ser carregados em um bucket s3 seguro dedicado e prontos para serem recarregados em execuções DRP. para verificar qual caminho de volumes configurar, execute docker inspect <service-name>e localize os volumes :

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

  1. Edite o conteúdo do arquivo de configuração env.txte coloque-o no caminho do projeto:

    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. Execute o contêiner de encaixe

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. Depois, verifique se o seu balde s3 contém os dados relevantes
avivamg
fonte
-1

Esta é uma maneira de backup de pasta de volume.
Se você tiver um registro do docker infra, esse método é muito útil.
Isso usa o Docker Registry para mover o arquivo zip facilmente.

#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

Em outro servidor

#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"

Execute sua imagem que usa essa pasta de volume.
Você pode criar uma imagem que contenha uma imagem de execução e um arquivo zip de volume facilmente.
Mas não recomendo por vários motivos (tamanho da imagem, comando de entrada, ..).

Myeongsik Joo
fonte