Docker Volumes: Persistência e Performance 💾
╔═══════════════════════════════════════╗
║ VOLUME ANATOMY ║
║ ║
║ [Container] ←→ [Volume] ←→ [Host] ║
║ ↑ ↑ ↑ ║
║ [Bind Mount] [tmpfs] [Block Device]║
║ ║
╚═══════════════════════════════════════╝
Volume Types 📦
Named Volumes
# Criar volume nomeado
docker volume create data-volume
# Usar volume
docker run -v data-volume:/app/data nginx
# Inspecionar volume
docker volume inspect data-volume
Bind Mounts
# Montar diretório do host
docker run -v /host/path:/container/path nginx
# Modo somente leitura
docker run -v /host/config:/app/config:ro nginx
tmpfs Mounts
# Montar volume em memória
docker run --tmpfs /app/cache nginx
# Configurar tamanho
docker run --tmpfs /app/cache:size=100M nginx
Volume Management 🛠️
Basic Operations
# Listar volumes
docker volume ls
# Remover volume
docker volume rm volume_name
# Remover volumes não utilizados
docker volume prune
# Backup de volume
docker run --rm \
-v volume_name:/source \
-v $(pwd):/backup \
alpine tar -czf /backup/volume.tar.gz -C /source .
Volume Drivers
# Criar volume com driver específico
docker volume create \
--driver local \
--opt type=btrfs \
--opt device=/dev/sda1 \
btrfs-volume
# Volume NFS
docker volume create \
--driver local \
--opt type=nfs \
--opt o=addr=192.168.1.1,rw \
--opt device=:/path/to/dir \
nfs-volume
Performance Optimization 🚀
Cache Configuration
# Volume para cache
docker volume create \
--driver local \
--opt type=tmpfs \
--opt device=tmpfs \
--opt o=size=1g \
cache-volume
# Usar cache
docker run \
-v cache-volume:/app/cache \
--memory-swappiness=0 \
app
I/O Tuning
version: '3.8'
services:
db:
volumes:
- data:/var/lib/mysql
deploy:
resources:
limits:
blkio-weight: 1000
volumes:
data:
driver_opts:
type: 'none'
o: 'bind'
device: '/mnt/high-perf-disk'
Docker Compose Integration 📋
Volume Configuration
version: '3.8'
services:
web:
volumes:
- web-data:/var/www/html
- ./config:/etc/nginx:ro
- type: tmpfs
target: /tmp
tmpfs:
size: 100M
volumes:
web-data:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/data/web'
Backup Strategy
services:
backup:
image: alpine
volumes:
- data-volume:/source:ro
- ./backups:/backup
command: tar -czf /backup/backup.tar.gz -C /source .
deploy:
restart_policy:
condition: none
Volume Security 🔒
Permission Management
# Definir permissões
docker run \
-v data:/app/data \
--user 1000:1000 \
app
# SELinux context
docker run \
-v data:/app/data:z \
app
Access Control
services:
app:
volumes:
- type: volume
source: sensitive-data
target: /app/data
read_only: true
volume:
nocopy: true
Troubleshooting 🔍
Common Issues
# Verificar montagens
docker inspect -f '{{ .Mounts }}' container_id
# Checar permissões
docker run --rm -v problem-volume:/vol alpine ls -la /vol
# Verificar espaço
docker system df -v
Debug Tools
# Inspecionar volume
docker volume inspect volume_name
# Testar acesso
docker run --rm \
-v volume_name:/test \
busybox touch /test/testfile
# Verificar logs
docker logs container_id 2>&1 | grep volume
Best Practices 💡
Volume Design
Use named volumes para dados persistentes
Bind mounts para desenvolvimento
tmpfs para dados sensíveis temporários
Planeje backup e restore
Monitore uso de espaço
Performance Tips
Use volumes locais para I/O intensivo
Configure cache apropriadamente
Evite bind mounts em produção
Monitore performance de I/O
Use volumes dedicados para dados críticos
Waifu Volume Tips 🎀
Próximos Passos 🎯
Performance Tuning
Backup Strategies
Referências 📚
16 abril 2025