Docker 1.9.0 e superior
Usar API de volume
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
Isso significa que o padrão de contêiner somente de dados deve ser abandonado em favor dos novos volumes.
Na verdade, a API de volume é apenas uma maneira melhor de atingir o que era o padrão de contêiner de dados.
Se você criar um contêiner com um -v volume_name:/container/fs/path
Docker, criará automaticamente um volume nomeado para você, que pode:
- Ser listado através do
docker volume ls
- Ser identificado através do
docker volume inspect volume_name
- Backup feito como um diretório normal
- Backup feito como antes através de uma
--volumes-from
conexão
A nova API de volume adiciona um comando útil que permite identificar volumes pendentes:
docker volume ls -f dangling=true
E depois remova-o pelo nome:
docker volume rm <volume name>
Como o @mpugach sublinha nos comentários, você pode se livrar de todos os volumes pendentes com um belo one-liner:
docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune
Docker 1.8.xe abaixo
A abordagem que parece funcionar melhor na produção é usar um contêiner apenas de dados .
O contêiner apenas de dados é executado em uma imagem de barebones e, na verdade, não faz nada, exceto expor um volume de dados.
Em seguida, você pode executar qualquer outro contêiner para ter acesso aos volumes do contêiner de dados:
docker run --volumes-from data-container some-other-container command-to-execute
- Aqui você pode obter uma boa imagem de como organizar os diferentes contêineres.
- Aqui há uma boa visão de como os volumes funcionam.
Em este post não é uma boa descrição do chamado recipiente como padrão de volume que esclarece o principal ponto de ter dados somente recipientes .
A documentação do Docker agora tem a descrição DEFINITIVA do contêiner como padrão de volume / s .
A seguir, é apresentado o procedimento de backup / restauração do Docker 1.8.xe abaixo.
CÓPIA DE SEGURANÇA:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- --rm: remova o contêiner ao sair
- --volumes-from DATA: anexa aos volumes compartilhados pelo contêiner DATA
- -v $ (pwd): / backup: bind monta o diretório atual no contêiner; para escrever o arquivo tar
- busybox: uma imagem pequena e simples - boa para manutenção rápida
- tar cvf /backup/backup.tar / data: cria um arquivo tar não compactado de todos os arquivos no diretório / data
RESTAURAR:
# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt
Aqui está um bom artigo do excelente Brian Goff explicando por que é bom usar a mesma imagem para um contêiner e um contêiner de dados.