Loading...
Loading...
Implemente armazenamento persistente com Docker volumes, bind mounts e estratégias de backup
npx skill4agent add promovaweb/skills-devops promovaweb-devops-docker-volumes| 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 |
| 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 |
# 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# 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# 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: 100mservices:
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 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 de um tar
docker run --rm \
-v app_data:/dest \
-v $(pwd)/backups:/backup:ro \
alpine tar xvf /backup/app_data_20240101.tar -C /destdocker run --rm \
-v source_volume:/from:ro \
-v target_volume:/to \
alpine cp -av /from/. /to/| Erro | Causa | Solução |
|---|---|---|
| Container em execução | Pare o container primeiro |
| Incompatibilidade de UID | Corrija a propriedade (ownership) |
| Disco cheio | Limpe ou expanda |
| Bind mount ausente | Crie o diretório |
# 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 myimagedocker volume lsdocker exec <c> df -hls -la# 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