Backup e restauração de volume do Docker

22

Estou usando o Docker para implantar alguns serviços em um servidor CentOS 6.4, e estou tentando descobrir como fazer o backup dos dados gerados adequadamente.

Por exemplo, um dos serviços é um aplicativo da Web no qual os usuários podem fazer upload de arquivos. Para este contêiner, tenho um volume /files que desejo fazer backup. As montagens de host parecem ter sido desaprovadas, porque essa montagem não é portável - como dito em este post em blog e a documentação do docker para volumes .

Sei da mesma postagem no blog que não preciso de uma montagem de host para acessar os arquivos em um volume, posso usar docker inspect para descobrir onde os arquivos estão.

Mas aqui está o meu problema: eu estava pensando em fazer o backup apenas dos dockerfiles necessários para construir os contêineres e os volumes associados a eles. No caso provável de eu ter que restaurar tudo do backup, como eu saberia qual diretório de volume corresponde a qual contêiner? Reconstruir o contêiner faz com que o id e o caminho do volume sejam alterados, então eu precisaria de algumas informações extras para combiná-los. O que mais, se alguma coisa, eu deveria fazer backup para poder realmente restaurar tudo?

    
por fcoelho 18.02.2014 / 16:59

2 respostas

23

Você está certo. Como você pode ter vários contêineres com volumes por conta própria, é necessário acompanhar qual volume corresponde a qual contêiner. Como fazer isso depende da sua configuração: Eu uso o nome -data para o contêiner de dados, então é óbvio para qual container uma imagem pertence. Dessa forma, pode ser feito um backup assim:

VOLUME='docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]''
tar -C $VOLUME . -czvf $NAME.tar.gz

Agora, basta recriar sua imagem e recriar seu contêiner de dados:

cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \
                              -i busybox tar -C /path/int/container -xzf -

Então, isso significa que você precisa fazer backup:

  • Dockerfile
  • volume
  • caminho do volume no contêiner
  • nome do contêiner ao qual o volume pertence

Atualização: Enquanto isso, criei uma ferramenta para fazer backup de contêineres e seus volumes (contêiner (es)): link e uma imagem de backup que pode criar backups e enviá-los para o s3: link

    
por 19.02.2014 / 11:33
5

No Docker mais recente (testado em 1.9.1, build 9894698 ), você pode usar o cp command .

Aqui está um exemplo de como copiar um diretório do container para o host:

docker cp wordpress:/var/www/html backups/wordpress.'date +"%Y%m%d"'/

Aqui está um exemplo de como copiar um diretório do container para um arquivo tar :

docker cp wordpress:/var/www/html - > backups/wordpress.'date +"%Y%m%d"'.tar

Por último, mas não menos importante, um exemplo de como copiar um diretório do container para um arquivo tar.gz :

docker cp wordpress:/var/www/html - | gzip > backups/wordpress.'date +"%Y%m%d"'.tar.gz
    
por 29.04.2016 / 16:48