3.0 KiB
MANUAL TÉCNICO - VOLUMES E PERSISTÊNCIA DE DADOS NO DOCKER
Código: ITGINF 0010/26 | Classificação: RESTRITO Responsável: João Pedro Toledo Gonçalves | Data: {{DATA_ATUAL}}
1. HISTÓRICO DE REVISÃO
⚠️ REGRA DE OURO:
- Autor: João Pedro Toledo Gonçalves.
- Descrição: Criação do documento.
| Data | Versão | Descrição | Autor |
|---|---|---|---|
| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves |
2. OBJETIVO
Definir estratégias de persistência de dados em conteineres (Stateful), diferenciando Volumes gerenciados de Bind Mounts e garantindo backup e permissões corretas.
3. PRÉ-REQUISITOS
- Docker Engine instalado.
- Entendimento básico de permissões Linux (chmod/chown).
4. PASSO A PASSO (EXECUÇÃO)
Etapa 1: Volumes Gerenciados (Recomendado)
ℹ️ NOTA: Volumes são gerenciados pelo Docker em
/var/lib/docker/volumes. São mais fáceis de fazer backup e migrar.
- Crie um volume explícito.
docker volume create dados-postgres - Use o volume em um container.
docker run -d --name db-prod -v dados-postgres:/var/lib/postgresql/data postgres:15
Etapa 2: Bind Mounts (Caminhos do Host)
⚠️ IMPORTANTE: Use Bind Mounts para arquivos de configuração (
nginx.conf) ou código fonte em desenvolvimento.
- Mapeie um diretório local absoluto para dentro do container.
docker run -d \ --name web-server \ -v /home/user/meu-site:/usr/share/nginx/html:ro \ nginx:ro= Read Only (O container não pode alterar os arquivos do host).
Etapa 3: Inspecionando Volumes
- Descubra onde os dados estão realmente salvos no disco.
docker volume inspect dados-postgres
Etapa 4: Backup de Volume
- Use um container temporário para tar/zipar o conteúdo de um volume.
docker run --rm \
-v dados-postgres:/volume \
-v $(pwd):/backup \
alpine tar cvf /backup/backup.tar /volume
5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING)
Problema 1: "Permission Denied" ao escrever no volume
- Causa: O UID do processo dentro do container é diferente do UID do dono da pasta no host (Bind Mount).
- Solução:
- Descubra o UID interno:
docker exec container id. - Ajuste o dono no host:
sudo chown -R 1000:1000 /pasta/local.
- Descubra o UID interno:
Problema 2: Volume órfão (Dados "perdidos")
- Causa: Remover container sem remover volume mantém os dados (o que é bom), mas pode confundir.
- Solução:
- Liste volumes:
docker volume ls. - Remova não usados:
docker volume prune.
- Liste volumes:
6. DADOS TÉCNICOS
| Campo | Valor | Descrição |
|---|---|---|
| Path Linux | /var/lib/docker/volumes |
Local padrão dos volumes |
| Driver | local |
Driver padrão |
7. VALIDAÇÃO FINAL
- O comando
docker volume lslista o volume criado? - Se remover o container (
docker rm -f), os dados persistem? - O container consegue ler/escrever no diretório mapeado?