🐳 Docker - ecosif-moviments
📋 Visão Geral
Este documento descreve como usar Docker para executar o serviço ecosif-moviments em containers.
🏗️ Dockerfile
O projeto já possui um Dockerfile otimizado usando multi-stage build:
Características
- ✅ Multi-stage build para otimizar tamanho da imagem
- ✅ Amazon Corretto 17 (Alpine) para runtime
- ✅ Usuário não-root para segurança
- ✅ Health check integrado
- ✅ Datadog APM configurado
- ✅ Otimizações JVM para containers
Estrutura
# Stage 1: Build
FROM maven:3.9-amazoncorretto-17 AS builder
# ... compilação ...
# Stage 2: Runtime
FROM amazoncorretto:17-alpine3.18
# ... configuração runtime ...
🚀 Como Usar
Opção 1: Docker Compose (Recomendado)
1. Configurar Variáveis de Ambiente
Crie um arquivo .env na raiz do projeto:
# Database
POSTGRES_HOST=db
POSTGRES_PORT=5432
POSTGRES_DB=ecosif
POSTGRES_USER=postgres
POSTGRES_PASSWORD=senha123
# Server
ECOSIF_MOVIMENTS_PORT=8082
# Security
AUTH_TOKEN_SECRET=your-secret-key-here
TOKEN_EXPIRATION=86400000
ECOSIF_CORS=http://localhost:4200
# AWS (opcional)
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_S3_BUCKET=
# JPA/Hibernate
HIBERNATE_DDL_AUTO=validate
ECOSIF_FLYWAY_ENABLED=true
# Logging
ECOSIF_LOGSHOW=false
LOG_FORMAT=default
2. Build e Executar
# Build e iniciar containers
docker-compose up -d
# Ver logs
docker logs -f ecosif-moviments
# Parar containers
docker-compose down
# Parar e remover volumes
docker-compose down -v
3. Verificar Saúde
# Health check do serviço
curl http://localhost:8082/actuator/health
# Health check do banco
docker exec db_ecosif-moviments pg_isready -U postgres
Opção 2: Docker Build Manual
1. Build da Imagem
# Build
docker build -t ecosif-moviments:latest .
# Ver imagem criada
docker images | grep ecosif-moviments
2. Executar Container
docker run -d \
--name ecosif-moviments \
-p 8082:8082 \
-e POSTGRES_HOST=host.docker.internal \
-e POSTGRES_PORT=5432 \
-e POSTGRES_DB=ecosif \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=senha123 \
-e ECOSIF_MOVIMENTS_PORT=8082 \
-e AUTH_TOKEN_SECRET=your-secret-key \
-e TOKEN_EXPIRATION=86400000 \
ecosif-moviments:latest
Nota: Para conectar ao banco PostgreSQL no host, use host.docker.internal (Mac/Windows) ou IP do host (Linux).
📦 Estrutura Docker Compose
O docker-compose.yml inclui:
Serviço: ecosif-moviments
- Imagem: Build local via Dockerfile
- Porta: 8082 (configurável)
- Health Check:
/actuator/health - Dependências: PostgreSQL (
db)
Serviço: db (PostgreSQL)
- Imagem:
postgres:15 - Porta: 5432
- Volumes: Persistência em
./docker-data/db - Health Check:
pg_isready
Rede
- Nome:
ecosif-network - Tipo: Bridge
🔧 Variáveis de Ambiente
| Variável | Descrição | Padrão |
|---|---|---|
POSTGRES_HOST |
Host do banco | db |
POSTGRES_PORT |
Porta do banco | 5432 |
POSTGRES_DB |
Nome do banco | ecosif |
POSTGRES_USER |
Usuário | postgres |
POSTGRES_PASSWORD |
Senha | - |
ECOSIF_MOVIMENTS_PORT |
Porta do serviço | 8082 |
AUTH_TOKEN_SECRET |
Chave JWT | - |
TOKEN_EXPIRATION |
Expiração token (ms) | 86400000 |
ECOSIF_CORS |
CORS allowed origins | http://localhost:4200 |
HIBERNATE_DDL_AUTO |
Modo DDL | validate |
ECOSIF_FLYWAY_ENABLED |
Habilitar Flyway | true |
AWS_ACCESS_KEY_ID |
Chave AWS (S3) | - |
AWS_SECRET_ACCESS_KEY |
Secret AWS (S3) | - |
AWS_S3_BUCKET |
Bucket S3 | - |
📊 Comandos Úteis
Logs
# Logs em tempo real
docker logs -f ecosif-moviments
# Últimas 100 linhas
docker logs --tail 100 ecosif-moviments
# Logs com timestamp
docker logs -f -t ecosif-moviments
Executar Comandos no Container
# Entrar no container
docker exec -it ecosif-moviments sh
# Verificar processos
docker exec ecosif-moviments ps aux
# Verificar variáveis de ambiente
docker exec ecosif-moviments env | grep ECOSIF
Reiniciar
# Reiniciar serviço
docker-compose restart ecosif-moviments
# Reiniciar tudo
docker-compose restart
# Recriar containers (útil após mudanças no código)
docker-compose up -d --build
Limpar
# Parar e remover containers
docker-compose down
# Parar, remover containers e volumes
docker-compose down -v
# Remover imagens não utilizadas
docker image prune
# Limpeza completa (cuidado!)
docker system prune -a
🐛 Troubleshooting
Container não inicia
# Ver logs de erro
docker logs ecosif-moviments
# Verificar se porta está em uso
lsof -i :8082 # Linux/Mac
netstat -ano | findstr :8082 # Windows
# Verificar conectividade com banco
docker exec ecosif-moviments ping db
Erro de conexão com banco
# Verificar se banco está rodando
docker ps | grep db_ecosif-moviments
# Ver logs do banco
docker logs db_ecosif-moviments
# Testar conexão manual
docker exec -it db_ecosif-moviments psql -U postgres -d ecosif
Health check falhando
# Verificar health check
curl http://localhost:8082/actuator/health
# Ver logs detalhados
docker logs ecosif-moviments | grep -i health
# Verificar se aplicação iniciou
docker logs ecosif-moviments | grep "Started Application"
Problemas de memória
# Ver uso de memória
docker stats ecosif-moviments
# Ajustar limites no docker-compose.yml
# Adicionar em services.ecosif-moviments:
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 1G
🔐 Segurança
Usuário Não-Root
O Dockerfile já configura usuário não-root (ecosif:1000).
Volumes
- Banco de dados:
./docker-data/db(dados persistentes) - Logs: dentro do container (use volumes se necessário)
Redes
- Rede isolada:
ecosif-network - Comunicação interna entre serviços
📈 Monitoramento
Health Check
# Health check manual
curl http://localhost:8082/actuator/health
# Com jq (se instalado)
curl -s http://localhost:8082/actuator/health | jq
Métricas Prometheus
# Métricas
curl http://localhost:8082/actuator/prometheus
Datadog APM
O agente Datadog está incluído no Dockerfile. Para habilitar:
- Configure variáveis de ambiente do Datadog
- Ou monte volume com configuração
📝 Best Practices
- ✅ Use docker-compose para desenvolvimento
- ✅ Não commite arquivo
.envcom senhas - ✅ Use secrets em produção (Docker Swarm/Kubernetes)
- ✅ Configure limites de memória/CPU
- ✅ Backup regular do volume do banco
- ✅ Use tags específicas em produção (não
latest) - ✅ Monitore logs regularmente
Última Atualização: 2025-11-27