🇺🇸 English version here
Docker para Desenvolvedores — Parte 3: Persistindo Dados com Volumes
Na Parte 2 desta série, vimos os comandos essenciais para operar containers no dia a dia. Mas há um detalhe importante: por padrão, os dados escritos dentro de um container são efêmeros — se o container for removido, esses dados desaparecem junto. Para aplicações com estado (bancos de dados, uploads de usuários, arquivos de configuração), isso é um problema. É para resolver isso que existem os volumes.
Bind mount x Volume
Existem duas formas principais de persistir dados fora do ciclo de vida do container:
- Bind mount: monta uma pasta especĂfica do host (a máquina onde o Docker roda) dentro do container. VocĂŞ tem controle total sobre onde os dados ficam no host, mas fica mais dependente da estrutura de pastas daquela máquina especĂfica.
-
Volume: gerenciado pelo próprio Docker, armazenado em uma área interna (
/var/lib/docker/volumes/no Linux). É a forma recomendada para a maioria dos casos, pois é mais portável entre ambientes e mais fácil de fazer backup, inspecionar e limpar.
Este artigo foca em volumes — a abordagem mais indicada para uso profissional.
Criando um volume
Para criar um volume nomeado, que vai armazenar os dados de uma aplicação:
docker volume create nome_do_vol
Listando volumes
Para ver todos os volumes já existentes no sistema:
docker volume ls
Inspecionando um volume
Para ver detalhes de um volume especĂfico — como o caminho real onde os dados ficam armazenados no host:
docker volume inspect nome_do_vol
Rodando um container com um volume -v
Usando bind mount
docker run --rm -d -it -v pasta_local:pasta_remota httpd
Aqui, pasta_local Ă© um caminho absoluto no host (por exemplo, /home/celso/dados), e pasta_remota Ă© o caminho dentro do container onde esses dados devem aparecer (por exemplo, /var/www/htdocs/).
Usando um volume criado
docker run --rm -d -it -v nome_do_volume:pasta_remota httpd
Nesse caso, nome_do_volume é o nome do volume criado anteriormente com docker volume create — o Docker cuida de onde esses dados ficam fisicamente armazenados.
Removendo um volume
Se algum container ainda estiver usando o volume, será preciso remover o container primeiro:
docker rm <nome_do_container>
Depois, para remover o volume:
docker volume rm nome_do_vol
Limpando volumes nĂŁo utilizados
Com o tempo, é comum acumular volumes órfãos (criados por containers que já foram removidos). Para limpar todos os volumes que não estão sendo usados por nenhum container:
docker volume prune
⚠️ Esse comando remove permanentemente os dados de qualquer volume não referenciado por um container ativo — confirme antes de rodar em um ambiente com dados importantes.
Usando volumes NFS
Em ambientes com mĂşltiplos hosts Docker (ou quando vocĂŞ quer compartilhar dados entre diferentes servidores), Ă© possĂvel criar um volume que aponta para um compartilhamento NFS em vez de armazenamento local:
docker volume create --opt type=nfs --opt o=addr=10.0.0.35,rw,nfsvers=4 --opt device=:/home/nfsshare nfs-volume
Onde:
-
type=nfs: define o driver de volume como NFS; -
o=addr=10.0.0.35,rw,nfsvers=4: endereço do servidor NFS e opções de montagem (leitura/escrita, versão do protocolo); -
device=:/home/nfsshare: caminho exportado pelo servidor NFS; -
nfs-volume: nome dado ao volume no Docker.
Isso é especialmente útil em cenários onde múltiplos containers (possivelmente em hosts diferentes) precisam acessar o mesmo conjunto de dados compartilhado.
PrĂłximos passos
Com volumes garantindo persistência de dados, o próximo desafio é a comunicação entre containers — especialmente quando uma aplicação depende de vários serviços (por exemplo, uma API que precisa falar com um banco de dados). Na Parte 4 desta série, vamos ver como criar e gerenciar redes no Docker.
Continua na Parte 4.
Top comments (0)