Docker: volumes ou bind mounts, onde ficam os dados e como os guardar

O que um contentor escreve dentro de si desaparece quando ele é apagado. Para os dados sobreviverem, ligam-se a um sítio fora do contentor, de duas formas: um volume (gerido pelo Docker) ou um bind mount (uma pasta do servidor que escolhe). A resposta curta: para uma base de dados, use um volume; para código ou ficheiros de configuração que quer editar à mão no servidor, um bind mount.

Qual escolher

Volume Bind mount
O que é Uma área que o Docker gere (por baixo de /var/lib/docker). Uma pasta do servidor, com o caminho que escolher.
Escreve-se no Compose db_data:/var/lib/postgresql/data ./config:/app/config
Bom para Bases de dados e dados da aplicação. Configuração e ficheiros que edita no servidor.
A armadilha Não se vê numa pasta à mão; apaga-se com down -v. Os donos e as permissões dos ficheiros têm de servir ao utilizador do contentor.

A configuração completa de uma aplicação com a base de dados está em Docker Compose: uma aplicação com a sua base de dados.

Ver onde estão os dados e fazer uma cópia

1 Liste os volumes e veja onde um está: docker volume ls
docker volume inspect nome-do-volume
O Compose junta o nome do projecto ao nome do volume (projecto_db_data). É esse o nome completo.
2 Para uma base de dados, faça uma cópia lógica e não uma cópia dos ficheiros com a base a correr: pg_dump ou mysqldump dentro do contentor. Os ficheiros de uma base a escrever podem ficar inconsistentes. Veja cópias com mysqldump e pg_dump.
3 Para os outros dados, copie o volume para um ficheiro com um contentor temporário:docker run --rm -v projecto_dados:/dados -v "$PWD":/copia alpine tar czf /copia/dados.tar.gz -C /dados .Isto cria dados.tar.gz na pasta onde está. Para restaurar, o mesmo com tar xzf sobre um volume vazio.
4 Guarde a cópia fora do servidor. Uma cópia no mesmo disco não protege de o disco avariar: cópias de um VPS.
Cuidado com os donos num bind mount. Se o contentor corre como um utilizador que não é o dono da pasta do servidor, falha ao escrever com «permission denied», mesmo estando tudo «montado». Ajuste o dono da pasta ao utilizador do contentor, em vez de pôr tudo a 777. E docker compose down -v apaga os volumes, ou seja, os dados: sem o -v, só remove os contentores.
Dê nomes claros aos volumes no Compose e escreva num ficheiro o que cada um guarda. Daqui a seis meses, ninguém se lembra qual dos volumes é a base de dados, e apagar o errado é o erro caro: limpar o disco sem perder dados.

Precisa de um servidor com espaço e cópias para os seus contentores? Veja os VPS.

Ver os servidores VPS

VEJA TAMBÉM

Docker Compose: uma aplicação com a sua base de dados

Actualizar uma aplicação Docker sem perder dados

O Docker a encher o disco: imagens, volumes e registos

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5,94 €/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?