O Problema: Os Containers São Efêmeros
Antes de falar dos volumes, você precisa entender um conceito fundamental: os containers Docker são efêmeros. O que isso significa?
Imagine que você tem um container com um banco de dados. Você insere dados, tudo funciona perfeitamente. Depois você para o container, reinicia e… os dados desapareceram. Puf, volatilizados.
Isso acontece porque cada container tem seu próprio sistema de arquivos isolado que vive e morre com o container. É como escrever na areia: assim que a onda chega, tudo desaparece.
O Que é um Volume Docker?
Um volume Docker é um mecanismo para salvar os dados fora do container, de forma que persistam mesmo quando o container é parado, reiniciado ou eliminado.
Pense nos volumes como um disco rígido externo que você conecta ao seu container. Os dados são escritos nesse “disco externo” e permanecem seguros independentemente do que aconteça com o container.
Por Que Usar Volumes?
- Persistência: os dados sobrevivem ao ciclo de vida do container
- Compartilhamento: vários containers podem acessar os mesmos dados
- Backup: é mais fácil fazer backup dos dados
- Performance: os volumes são otimizados para operações I/O
- Portabilidade: você pode mover os dados entre hosts diferentes
As Três Formas de Gerenciar Dados no Docker
Docker oferece três abordagens para a gestão de dados. Vamos vê-las da mais recomendada à menos.
1. Volumes - A Escolha Recomendada
Os volumes são gerenciados completamente pelo Docker e salvos em um diretório especial no host (/var/lib/docker/volumes/ no Linux).
| |
Vantagens:
- Gerenciados pelo Docker (fáceis de criar, eliminar, inspecionar)
- Funcionam em Linux, Windows e Mac
- Podem ser compartilhados entre vários containers
- Suportam drivers para armazenamento remoto (cloud, NFS, etc.)
2. Bind Mounts - Conexão Direta
Os bind mounts conectam uma pasta específica do seu computador diretamente ao container.
| |
Quando usá-los:
- Durante o desenvolvimento, para ver as mudanças no código em tempo real
- Quando você precisa acessar arquivos específicos do sistema host
- Para compartilhar configurações entre host e container
Atenção: os bind mounts dependem da estrutura do sistema de arquivos do host, então são menos portáveis.
3. tmpfs Mounts - Dados Temporários na Memória
Os tmpfs mounts salvam os dados na RAM do host, não no disco.
| |
Quando usá-los:
- Para dados sensíveis que não devem ser escritos no disco
- Para caches temporários de alta performance
- Os dados são perdidos quando o container para (e é exatamente isso que você quer)
Comandos Essenciais para Volumes
Criar um Volume
| |
Listar Volumes
| |
Inspecionar um Volume
| |
Este comando mostra onde o volume está fisicamente salvo e outras informações úteis.
Eliminar um Volume
| |
Atenção: eliminar um volume significa perder todos os dados contidos. Não há lixeira ou recuperação.
Exemplos Práticos
Exemplo 1: Banco de Dados MySQL com Dados Persistentes
Sem volume, cada vez que você reinicia o container MySQL perde todos os dados. Veja como resolver:
| |
Agora você pode parar, reiniciar ou até eliminar e recriar o container: os dados do banco de dados permanecerão intactos no volume mysql-data.
Exemplo 2: Desenvolvimento Web com Bind Mount
Durante o desenvolvimento, você quer que as modificações no código sejam imediatamente visíveis no container:
| |
Cada modificação nos arquivos na pasta src estará imediatamente disponível no container.
Exemplo 3: Compartilhar Dados entre Containers
Dois containers que precisam acessar os mesmos arquivos:
| |
Volumes no Docker Compose
Quando você usa Docker Compose, definir os volumes é ainda mais simples:
| |
Com um simples docker-compose up, Docker cria automaticamente os volumes necessários.
Backup e Restauração de Volumes
Fazer Backup de um Volume
| |
Este comando:
- Monta o volume em modo somente leitura (
ro) - Cria um arquivo compactado no diretório atual
Restaurar um Backup
| |
Erros Comuns a Evitar
1. Esquecer de Usar Volumes para Bancos de Dados
Se você usa um banco de dados no Docker sem volume, vai perder todos os dados. Sempre.
2. Usar Bind Mounts em Produção
Os bind mounts são ótimos para desenvolvimento, mas em produção use volumes Docker para maior portabilidade e segurança.
3. Não Fazer Backup dos Volumes
Os volumes não são incluídos automaticamente nos backups do sistema. Planeje backups regulares.
4. Acumular Volumes Órfãos
Quando você elimina containers, os volumes permanecem. Use periodicamente:
| |
Para eliminar os volumes que não estão mais conectados a nenhum container.
Quando Usar O Quê: Resumo
| Cenário | Solução |
|---|---|
| Banco de dados em produção | Volume Docker |
| Desenvolvimento local | Bind mount |
| Dados sensíveis temporários | tmpfs |
| Compartilhamento entre containers | Volume Docker |
| Arquivos de configuração | Bind mount ou Volume |
| Logs de aplicação | Volume Docker |
Conclusões
Os volumes Docker resolvem um dos problemas fundamentais dos containers: a persistência de dados. Sem volumes, os containers seriam úteis apenas para aplicações stateless.
Lembre-se das regras de ouro:
- Use sempre volumes para bancos de dados
- Use bind mounts para desenvolvimento local
- Faça backups regulares dos volumes importantes
- Limpe periodicamente os volumes órfãos
Uma vez entendido o conceito, os volumes se tornam tão naturais quanto salvar um arquivo no disco. E seus dados estarão finalmente seguros, independentemente do que aconteça com os containers.