<aside>
Contenido
</aside>
<aside>
La solución se despliega completamente en contenedores Docker mediante Docker Compose. Un solo comando levanta toda la infraestructura: 2 microservicios + 2 bases de datos PostgreSQL + RabbitMQ.
Dockerfiles (Multi-stage build):
Cada microservicio tiene su propio Dockerfile con dos etapas:
maven:3.9-amazoncorretto-21-alpine para compilar el proyecto y generar el JAR. Es una imagen pesada que incluye Maven y el JDK completo.amazoncorretto:21-alpine que solo tiene el JRE. El resultado es una imagen final más pequeña y segura (no incluye herramientas de compilación).application.yml: Configuración para desarrollo local. Usa localhost con los puertos mapeados (5436, 5437).application-docker.yml: Configuración para Docker. Usa los nombres de los contenedores (postgres-clientes:5432, rabbitmq:5672). Se activa con la variable SPRING_PROFILES_ACTIVE=docker.Dentro de la red Docker, los contenedores se comunican por el puerto interno (5432), no por el mapeado al host (5436). El mapeo al host solo sirve para acceso externo (IntelliJ, Postman).
postgres-clientes: PostgreSQL 16 para ms-clientes (puerto host: 5436).postgres-cuentas: PostgreSQL 16 para ms-cuentas (puerto host: 5437).rabbitmq: RabbitMQ 3.13 con Management UI (puertos: 5672 AMQP, 15672 UI).ms-clientes: Microservicio de clientes (puerto: 8081).ms-cuentas: Microservicio de cuentas (puerto: 8082).Orden de arranque:depends_on con condition: service_healthy garantiza que los microservicios no arrancan hasta que PostgreSQL y RabbitMQ estén listos. Sin esto, la app intentaría conectarse a una BD que todavía está iniciando.
Red Docker: Todos los contenedores comparten la red devsu-network (bridge). Esto permite que se comuniquen por nombre de servicio (ej. ms-cuentas llama a ms-clientes:8081 en vez de localhost:8081).
# Levantar todo (primera vez, tarda por la compilaciónn Maven)
docker-compose up -d --build
# Verificar que los 5 contenedores estén corriendo
docker-compose ps
# Ver logs de un servicio específico
docker-compose logs -f ms-clientes
# Detener contenedores (mantiene datos)
docker-compose down
# Detener y eliminar volúmenes (datos limpios)
docker-compose down -v
# Reconstruir solo un servicio después de cambios
docker-compose up -d --build ms-clientes
</aside>