docker / Guias

Volume Docker ou bind mount: qual usar?

Escolha conforme a localização dos dados e o seu fluxo de trabalho. Um volume atende dados gerenciados pelo Docker; um bind mount expõe ao contêiner um caminho escolhido no host.

Os exemplos usam Bash; consulte as referências para os detalhes do seu ambiente.

Compare os dois modelos de armazenamento

PerguntaVolume nomeadoBind mount
Quem escolhe onde os dados ficam?O Docker gerencia o local.Você informa um caminho do host.
Uso típicoDados persistentes da aplicação.Código-fonte ou arquivo de configuração do host.
O que um novo host precisa?Criar ou restaurar o volume.Disponibilizar o caminho e os arquivos necessários.

Ambos podem sobreviver à remoção do contêiner. Nenhum deles é automaticamente um backup. Com um daemon Docker remoto, o caminho de origem do bind pertence ao host do daemon, não necessariamente ao computador em que você digita o comando.

Observe a persistência de um volume nomeado

Escolha um nome de volume ainda não utilizado para este exercício. Os comandos usam uma imagem Alpine pequena; a primeira execução pode baixá-la.

docker volume create devsheet-volume-demo
docker run --rm --mount type=volume,source=devsheet-volume-demo,target=/data alpine:3.22 sh -c "echo hello > /data/note.txt"
docker run --rm --mount type=volume,source=devsheet-volume-demo,target=/data alpine:3.22 cat /data/note.txt

Resultado esperado: hello na segunda execução. O primeiro contêiner foi removido por --rm, enquanto o volume explicitamente nomeado manteve o arquivo. O volume do exercício permanece até você removê-lo de propósito.

Monte um diretório do host em modo somente leitura

No Bash, crie um novo diretório de exercício com um arquivo. A origem precisa existir ao usar esta sintaxe de bind mount.

mkdir devsheet-bind-demo
printf "hello\n" > devsheet-bind-demo/note.txt
docker run --rm --mount "type=bind,source=$(pwd)/devsheet-bind-demo,target=/data,readonly" alpine:3.22 cat /data/note.txt

Resultado esperado: hello do arquivo do host. A opção readonly impede gravações por essa montagem no contêiner. O Docker Desktop pode pedir permissão para compartilhar esse diretório do host. O diretório do host permanece após o comando.

Confira as montagens antes de confiar na persistência

Montar sobre um diretório não vazio do contêiner oculta o conteúdo existente enquanto a montagem estiver ativa. Confirme o caminho com docker inspect <container> e confira a seção Mounts.

Um bind mount gravável permite ao contêiner alterar arquivos do host naquele caminho. Limite o diretório exposto. Para bancos de dados, use um método de backup adequado ao banco, em vez de copiar arquivos em uso sem verificar a consistência.

Referências

Todos os guias