No post anterior, falamos sobre como o Docker simplifica a criação e gerenciamento de ambientes de desenvolvimento. Hoje, vamos abordar um tema essencial para garantir que seus dados não sejam perdidos ao reiniciar ou remover containers: a persistência de dados com volumes Docker.
🛠️ Por que a Persistência é Importante?
Containers Docker são projetados para serem efêmeros, ou seja, tudo o que é criado ou alterado dentro do container será perdido quando ele for parado ou excluído. Isso é um problema em muitos casos, como:
- Bancos de dados que precisam manter registros entre reinicializações.
- Armazenamento de arquivos de configuração ou logs.
- Ambientes de produção, onde os dados precisam ser mantidos permanentemente.
A solução para isso é usar volumes Docker, que permitem armazenar dados de forma persistente fora do ciclo de vida dos containers.
📦 Tipos de Persistência no Docker
O Docker oferece duas formas principais de persistir dados:
- Bind Mounts
- Mapeia um diretório do sistema host para dentro do container.
- Ideal para desenvolvimento, pois permite compartilhar arquivos do host diretamente.
- Volumes Nomeados
- Gerenciados pelo Docker.
- Mais seguro e recomendado para produção, pois isola os dados do sistema host.
📝 Criando e Usando Volumes
1. Criar um Volume Nomeado
Você pode criar um volume nomeado antes de usá-lo:
docker volume create meu-volume
Verifique os volumes criados:
docker volume ls
2. Montar o Volume em um Container
Para usar o volume criado, monte-o no container:
docker run -d –name meu-container -v meu-volume:/app/data nginx
-v meu-volume:/app/data
: Mapeia o volume nomeadomeu-volume
para o diretório/app/data
no container.
Agora, todos os arquivos salvos em /app/data
no container serão persistidos no volume meu-volume
.
3. Exemplo Prático: Persistindo Dados de um Banco de Dados PostgreSQL
Passo 1: Criar um Volume
docker volume create pgdata
Passo 2: Executar o Container com o Volume
docker run -d \
–name postgres \
-e POSTGRES_USER=admin \
-e POSTGRES_PASSWORD=admin123 \
-v pgdata:/var/lib/postgresql/data \
postgres
-v pgdata:/var/lib/postgresql/data
: Garante que os dados do banco serão armazenados no volume pgdata
.
Passo 3: Testar a Persistência
- Pare o container:
docker stop postgres
Remova o container:
docker rm postgres
Inicie um novo container usando o mesmo volume:
docker run -d \
–name postgres2 \
-e POSTGRES_USER=admin \
-e POSTGRES_PASSWORD=admin123 \
-v pgdata:/var/lib/postgresql/data \
postgres
Os dados estarão intactos no novo container.
🔍 Bind Mounts: Para Desenvolvimento Local
Se você deseja mapear um diretório do sistema host para dentro do container, use bind mounts:
docker run -d \
–name nginx-dev \
-v $(pwd)/site:/usr/share/nginx/html \
nginx
$(pwd)/site:/usr/share/nginx/html
: Mapeia o diretório localsite
para o diretório/usr/share/nginx/html
no container.
Alterar arquivos no diretório site
reflete imediatamente no container, ideal para desenvolvimento.
🛡️ Boas Práticas com Volumes
- Use Volumes Nomeados para Produção
- Eles são gerenciados pelo Docker e evitam problemas com permissões no sistema host.
- Limpe Volumes Não Utilizados
- Remova volumes órfãos com:
docker volume prune
Não Compartilhe Diretórios Sensíveis
- Evite mapear diretórios críticos do host, como
/etc
ou/var
.
Faça Backup de Volumes
- Você pode criar backups de volumes usando o comando:
docker run –rm -v meu-volume:/data -v $(pwd):/backup ubuntu tar cvf /backup/meu-volume-backup.tar /data
🚀 Enfim…
Volumes são uma das funcionalidades mais importantes do Docker, permitindo que você armazene e proteja dados fora do ciclo de vida dos containers. Neste post, aprendemos:
- A diferença entre bind mounts e volumes nomeados.
- Como criar e usar volumes no Docker.
- Boas práticas para trabalhar com persistência de dados.
No próximo post, vamos abordar Docker Networks, explorando como conectar múltiplos containers para criar sistemas completos.
Até lá, experimente implementar volumes em seus projetos e veja como isso pode simplificar sua vida!