Estou usando o Docker para implantar alguns serviços em um servidor CentOS 6.4 e estou tentando descobrir como fazer backup dos dados que eles geram corretamente.
Por exemplo, um dos serviços é um aplicativo da web em que os usuários podem fazer upload de arquivos. Para este contêiner, tenho um /files
volume que desejo fazer backup. As montagens de host parecem um pouco desaprovadas, porque essa montagem não é de maneira alguma portátil - como dito nesta postagem no blog e na documentação do docker para volumes .
Sei pela 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 estão os arquivos.
Mas aqui está o meu problema: eu estava pensando em fazer backup apenas dos arquivos de encaixe necessários para criar os contêineres e os volumes associados a eles. Na eventualidade de eu precisar restaurar tudo do backup, como saberia qual diretório de volume corresponde a qual contêiner? A reconstrução do contêiner faz com que o ID e o caminho do volume sejam alterados, por isso precisaria de algumas informações extras para correspondê-los. O que mais, se houver, devo fazer backup para poder realmente restaurar tudo?
docker inspect
s construído em templates assim:VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" )
. Provavelmente também é aconselhável lembrar as pessoas para não esperar fazer backup de arquivos dessa maneira enquanto estiverem ativamente em uso (por exemplo, bancos de dados).Volumes
desapareceu e existemMounts
estruturas diferentes. Precisamos trabalhar um pouco maisrange
para encontrar o ponto de montagem em que estamos interessadosVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")
Na mais recente Docker (testado em
1.9.1, build 9894698
) você pode usar ocp
comando .Aqui está um exemplo de como copiar um diretório do contêiner para o host:
Aqui está um exemplo de como copiar um diretório do contêiner para um
tar
arquivo:Por último, mas não menos importante, um exemplo de como copiar um diretório do contêiner para um
tar.gz
arquivo:fonte
docker cp
envia tudo pela rede. É algo que você deseja evitar, especialmente se o volume do Docker já é um volume btrfs.docker cp
seria bom.