cd ..
DOCKER

Volumes, bind mounts e tmpfs no Docker

Volumes, bind mounts e tmpfs no Docker

Containers são efêmeros por natureza: ao remover um, tudo o que foi escrito na camada de execução (RW) desaparece junto — inclusive o echo que fizemos lá na parte 2 desta série. Sempre que um dado precisa sobreviver ao ciclo de vida do container, ele precisa morar fora dessa camada. É para isso que existem os volumes.

O que são volumes

Volumes são diretórios externos ao container, montados diretamente nele. Por serem externos, eles bypassam o sistema de camadas do container — ou seja, não seguem aquele padrão de imagem somando camada sobre camada que vimos na parte 3.

O Docker suporta três tipos principais de mount: bind mount, volume nomeado e tmpfs.

Bind mount: encaixando uma pasta do host no container

docker run -ti --name testando-volumes \
  --mount type=bind,source=/home/usuario/projeto,target=/giropops-senhas \
  debian

Esse comando cria um container Debian e “encaixa” uma pasta real da máquina host dentro dele. A ideia por trás do bind mount é simples: “Docker, pega essa pasta real do meu Linux e faz ela aparecer dentro do container, como se fosse outro caminho.”

ParâmetroSignificado
sourcea pasta da máquina real (o host)
targeto caminho onde essa pasta vai aparecer dentro do container

Para impedir que o container escreva de volta na pasta do host, é só adicionar a opção de somente leitura:

--mount type=bind,source=/home/usuario/projeto,target=/giropops-senhas,readonly

Volumes nomeados: gerenciados pelo próprio Docker

Diferente do bind mount, que aponta para um caminho específico que você escolhe no host, um volume nomeado é criado e gerenciado pelo próprio Docker — sem depender de você saber (ou se importar) onde ele fica fisicamente guardado.

docker volume ls
docker volume create meudb
docker volume inspect meudb

E para usar esse volume em um container:

docker run -d --name meu-container --mount type=volume,source=meudb,target=/dados debian

Declarando um volume no Dockerfile

SHELL ["/bin/bash", "-c"]
VOLUME /app/dados

tmpfs: um filesystem temporário em memória

O tmpfs é um tipo de mount onde o Docker cria uma área temporária em memória RAM dentro do container — útil para dados sensíveis ou temporários que você não quer que toquem o disco, e que somem assim que o container para.

docker run -d --name web-2 \
  --mount type=tmpfs,target=/nginx-cache \
  -p 8081:80 nginx

Resumo dos três tipos

TipoOnde fica o dadoSobrevive ao container?Uso típico
Bind mountpasta escolhida no hostsimdesenvolvimento, compartilhar código-fonte
Volume nomeadogerenciado pelo Dockersimdados de aplicação, bancos de dados
tmpfsmemória RAMnãocache, segredos temporários

Conclusão

Volumes resolvem o problema de persistência container por container. Mas quando a aplicação cresce e precisa conversar com outros containers — um banco, um cache — surge outro problema: como esses containers se enxergam? É o assunto da próxima parte da série, sobre redes no Docker.

Referências

O que achou?