🐳 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

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

Serviço: db (PostgreSQL)

Rede


🔧 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

Redes


📈 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:

  1. Configure variáveis de ambiente do Datadog
  2. Ou monte volume com configuração

📝 Best Practices

  1. Use docker-compose para desenvolvimento
  2. Não commite arquivo .env com senhas
  3. Use secrets em produção (Docker Swarm/Kubernetes)
  4. Configure limites de memória/CPU
  5. Backup regular do volume do banco
  6. Use tags específicas em produção (não latest)
  7. Monitore logs regularmente

Última Atualização: 2025-11-27