Docker - ecosif-masterdata
Este documento explica como usar Docker para executar o ecosif-masterdata.
Pré-requisitos
- Docker 20.10+
- Docker Compose 2.0+
Dockerfile
O projeto inclui um Dockerfile multi-stage que:
- Stage 1 (Build): Compila a aplicação usando Maven
- Stage 2 (Runtime): Cria imagem final otimizada com apenas o JAR
Características do Dockerfile
- Base: Amazon Corretto 17 (Alpine)
- Multi-stage: Reduz tamanho final da imagem
- Usuário não-root: Executa como usuário
ecosif(segurança) - Health check: Incluído para monitoramento
- Otimizações JVM: Configuradas para containers
- Datadog APM: Suporte opcional
Build da Imagem
Build Local
docker build -t ecosif-masterdata:latest .
Build com Tag Específica
docker build -t ecosif-masterdata:0.7.01.202511281 .
Docker Compose
docker-compose.yml
O arquivo docker-compose.yml está na raiz do projeto e inclui:
- Serviço PostgreSQL
- Serviço ecosif-masterdata
- Rede dedicada
- Volume persistente para dados do PostgreSQL
Arquivo .env
Crie um arquivo .env na mesma pasta do docker-compose.yml:
# Database
POSTGRES_DB=ecosif
POSTGRES_USER=postgres
POSTGRES_PASSWORD=sua_senha_segura
POSTGRES_PORT=5432
# Server
ECOSIF_MASTERDATA_PORT=8081
# JWT (OBRIGATÓRIO - deve ser a mesma do ecosif-auth)
AUTH_TOKEN_SECRET=$(openssl rand -base64 64)
# Token Expiration (30 minutos)
TOKEN_EXPIRATION=1800000
# OAuth2 (Opcional)
AUTH2_CLIENT_ID=
AUTH2_SECRET=
# CORS
ECOSIF_CORS=http://localhost:4200
# Flyway
ECOSIF_FLYWAY_ENABLED=false
# Hibernate
HIBERNATE_DDL_AUTO=none
# Logging
LOG_FORMAT=default
ECOSIF_LOGSHOW=false
ECOSIF_LOGMODE_ROOT=INFO
ECOSIF_LOGMODE_SPRING=INFO
ECOSIF_LOGMODE_HIBERNATE_SQL=INFO
# AWS S3 (Opcional)
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_S3_BUCKET=
# Timezone
TZ=America/Sao_Paulo
Executando com Docker Compose
Iniciar Serviços
docker-compose up -d
Ver Logs
# Todos os serviços
docker-compose logs -f
# Apenas ecosif-masterdata
docker-compose logs -f ecosif-masterdata
# Apenas postgres
docker-compose logs -f postgres
Parar Serviços
docker-compose stop
Parar e Remover Contêineres
docker-compose down
Parar e Remover Tudo (incluindo volumes)
docker-compose down -v
⚠️ ATENÇÃO: Isso remove todos os dados do PostgreSQL!
Rebuild da Imagem
docker-compose build --no-cache
docker-compose up -d
Executando Container Individualmente
Executar Container
docker run -d \
--name ecosif-masterdata \
-p 8081:8081 \
-e POSTGRES_HOST=host.docker.internal \
-e POSTGRES_PORT=5432 \
-e POSTGRES_DB=ecosif \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=senha \
-e AUTH_TOKEN_SECRET=sua_chave_secreta_muito_longa \
ecosif-masterdata:latest
Health Check
O container inclui health check configurado:
# Verificar status
docker ps
# Health check manual
docker exec ecosif-masterdata curl -f http://localhost:8081/actuator/health
Troubleshooting
Container não inicia
-
Verifique os logs:
bash docker logs ecosif-masterdata -
Verifique variáveis de ambiente:
bash docker exec ecosif-masterdata env | grep POSTGRES -
Verifique conectividade com banco:
bash docker exec ecosif-masterdata ping postgres
Erro de conexão com banco
-
Verifique se o PostgreSQL está rodando:
bash docker ps | grep postgres -
Verifique se as credenciais estão corretas
-
Verifique se a rede está configurada corretamente:
bash docker network inspect ecosif-network
Container reinicia constantemente
-
Verifique os logs:
bash docker logs --tail 100 ecosif-masterdata -
Verifique recursos (memória, CPU):
bash docker stats ecosif-masterdata -
Verifique health check:
bash docker inspect ecosif-masterdata | grep Health -A 10
Volumes Persistentes
Dados do PostgreSQL
Os dados do PostgreSQL são persistidos em volume:
# Listar volumes
docker volume ls
# Inspecionar volume
docker volume inspect <nome-do-volume>
Backup do Banco
# Criar backup
docker exec ecosif-postgres pg_dump -U postgres ecosif > backup.sql
# Restaurar backup
docker exec -i ecosif-postgres psql -U postgres ecosif < backup.sql
Otimizações
Reduzir Tamanho da Imagem
O Dockerfile já está otimizado com multi-stage build. Para reduzir ainda mais:
- Use
.dockerignorepara excluir arquivos desnecessários - Use Alpine Linux (já está usando)
- Limpe cache do Maven após build
Performance
-
Ajuste recursos do container:
yaml deploy: resources: limits: cpus: '2' memory: 2G reservations: cpus: '1' memory: 1G -
Configure JVM para containers:
bash JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"
Produção
Recomendações para Produção
- Use secrets: Não coloque senhas em variáveis de ambiente simples
- HTTPS: Configure reverse proxy (nginx, traefik) com HTTPS
- Monitoramento: Configure health checks e métricas
- Backups: Configure backups automáticos do banco
- Logs: Configure log aggregation (ELK, CloudWatch, etc.)
- Resources: Defina limites de recursos
- Rede: Use rede isolada
- Tags: Use tags específicas (não
latest)
Exemplo com Secrets
services:
ecosif-masterdata:
secrets:
- db_password
- jwt_secret
secrets:
db_password:
external: true
jwt_secret:
external: true
Integração com Outros Serviços
O ecosif-masterdata pode ser executado junto com outros serviços ecosif usando o docker-compose do diretório configure/:
cd configure/
docker-compose up -d
Isso iniciará todos os serviços do ecossistema ecosif.