promovaweb-devops-docker-volumes
Skill de Docker Volumes
Domine o armazenamento persistente do Docker, incluindo volumes nomeados, bind mounts, tmpfs e procedimentos de backup/restauração de dados.
Propósito
Implementar persistência de dados confiável para containers com gerenciamento adequado de volume, estratégias de backup e manipulação de permissões.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| volume_name | string | Não | - | Nome para o volume |
| mount_type | enum | Não | volume | volume/bind/tmpfs |
| backup | boolean | Não | false | Incluir comandos de backup |
Tipos de Armazenamento
| Tipo | Persistência | Caso de Uso | Gerenciado Por |
|---|---|---|---|
| Named Volume | Sim | Dados de Produção | Docker |
| Bind Mount | Sim | Desenvolvimento, configs | Host |
| tmpfs | Não (memória) | Secrets, arquivos temporários | Docker |
| Anonymous | Ciclo de vida do container | Espaço temporário (scratch space) | Docker |
Operações de Volume
Named Volumes
# Criar volume
docker volume create app_data
# Usar no container
docker run -d \
-v app_data:/var/lib/postgresql/data \
postgres:16-alpine
# Inspecionar volume
docker volume inspect app_data
# Listar volumes
docker volume ls
# Remover volumes não utilizados
docker volume prune
Bind Mounts
# Desenvolvimento - montar código-fonte
docker run -d \
-v $(pwd)/src:/app/src \
node:20-alpine
# Configuração apenas leitura (read-only)
docker run -d \
-v /etc/app/config.yaml:/app/config.yaml:ro \
myapp
tmpfs Mounts
# Dados sensíveis em memória
docker run -d \
--tmpfs /app/secrets:rw,noexec,nosuid,size=64m \
myapp
# Sintaxe do Compose
services:
app:
volumes:
- type: tmpfs
target: /app/tmp
tmpfs:
size: 100m
Docker Compose Volumes
services:
database:
image: postgres:16-alpine
volumes:
- db_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
app:
image: myapp
volumes:
- uploads:/app/uploads
- ./config:/app/config:ro
volumes:
db_data:
driver: local
uploads:
external: true # Pré-criado
Backup & Restauração
Backup de Volume
# Backup para arquivo tar
docker run --rm \
-v app_data:/source:ro \
-v $(pwd)/backups:/backup \
alpine tar cvf /backup/app_data_$(date +%Y%m%d).tar -C /source .
# Backup compactado
docker run --rm \
-v app_data:/source:ro \
-v $(pwd)/backups:/backup \
alpine tar czvf /backup/app_data_$(date +%Y%m%d).tar.gz -C /source .
Restaurar Volume
# Restaurar de um tar
docker run --rm \
-v app_data:/dest \
-v $(pwd)/backups:/backup:ro \
alpine tar xvf /backup/app_data_20240101.tar -C /dest
Clonar Volume
docker run --rm \
-v source_volume:/from:ro \
-v target_volume:/to \
alpine cp -av /from/. /to/
Tratamento de Erros
Erros Comuns
| Erro | Causa | Solução |
|---|---|---|
volume in use |
Container em execução | Pare o container primeiro |
permission denied |
Incompatibilidade de UID | Corrija a propriedade (ownership) |
no space left |
Disco cheio | Limpe ou expanda |
path not found |
Bind mount ausente | Crie o diretório |
Correções de Permissão
# Verificar propriedade (ownership)
docker run --rm -v app_data:/data alpine ls -la /data
# Corrigir propriedade (deve corresponder ao usuário do container)
docker run --rm -v app_data:/data alpine chown -R 1000:1000 /data
# SELinux (RHEL/CentOS)
docker run -v /host/path:/container/path:Z myimage
Solução de Problemas (Troubleshooting)
Checklist de Depuração
- O volume existe?
docker volume ls - O mount está visível?
docker exec <c> df -h - As permissões estão corretas?
ls -lano container - Os dados estão persistindo? Pare/inicie o container
Comandos de Diagnóstico
# Verificar localização do volume
docker volume inspect app_data --format '{{.Mountpoint}}'
# Verificar mounts do container
docker inspect <container> --format '{{json .Mounts}}'
# Verificar uso de disco
docker system df -v
More from promovaweb/skills-devops
promovaweb-devops-docker
Verifica o ambiente Docker do servidor — versão do Docker Engine, status do Swarm, nós do cluster, rede network_swarm_public, volumes externos e conformidade geral com as recomendações da Promovaweb.
10promovaweb-devops-review-evolution-go-stack
Verifica a Stack do Evolution Go. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack Evolution Go de Acordo com as Recomendações da Promovaweb.
9promovaweb-devops-dockerfile-basics
Aprenda os fundamentos do Dockerfile e as melhores práticas para criar imagens de container prontas para produção
9promovaweb-devops-review-chatwoot-stack
Verifica a Stack do Chatwoot. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack Chatwoot de Acordo com as Recomendações da Promovaweb.
9promovaweb-devops-docker-networking
Configure a rede (networking) do Docker para containers, incluindo bridge, overlay e service discovery
9promovaweb-devops-review-kestra-stack
Verifica a Stack do Kestra. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack Kestra de Acordo com as Recomendações da Promovaweb.
9