40 lines
1.4 KiB
Docker
40 lines
1.4 KiB
Docker
# --- Stage 1: Dependencias ---
|
|
FROM maven:3.9-eclipse-temurin-21-alpine AS deps
|
|
WORKDIR /app
|
|
# Copiamos solo el pom.xml para descargar librerías (esta capa se cachea)
|
|
COPY pom.xml .
|
|
COPY application/pom.xml ./application
|
|
COPY bootstrap/pom.xml ./bootstrap
|
|
COPY domain/pom.xml ./domain
|
|
COPY infrastructure/pom.xml ./infrastructure
|
|
RUN mvn dependency:go-offline
|
|
|
|
# --- Stage 2: Build ---
|
|
FROM deps AS build
|
|
COPY application/src ./application/src
|
|
COPY bootstrap/src ./bootstrap/src
|
|
COPY domain/src ./domain/src
|
|
COPY infrastructure/src ./infrastructure/src
|
|
# Al haber descargado las deps antes, esto es mucho más rápido
|
|
RUN mvn clean package -DskipTests -Dmaven.main.skip=false
|
|
|
|
# --- Stage 3: Run (Imagen final ultra-ligera) ---
|
|
FROM eclipse-temurin:21-jre-alpine
|
|
WORKDIR /app
|
|
|
|
# Crear un usuario sin privilegios por seguridad y para ahorrar recursos
|
|
RUN addgroup -S spring && adduser -S spring -G spring
|
|
USER spring:spring
|
|
|
|
COPY --from=build /app/bootstrap/target/*.jar app.jar
|
|
|
|
# Optimización de flags para APIs pequeñas:
|
|
# 1. SerialGC consume menos memoria que G1GC en montones pequeños (< 1GB)
|
|
# 2. TieredCompilation ayuda a arrancar más rápido con menos CPU
|
|
ENTRYPOINT ["java", \
|
|
"-XX:+UseContainerSupport", \
|
|
"-XX:MaxRAMPercentage=70.0", \
|
|
"-XX:+UseSerialGC", \
|
|
"-XX:TieredStopAtLevel=1", \
|
|
"-Xms64m", \
|
|
"-jar", "app.jar"] |