# --- 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 . RUN mvn dependency:go-offline # --- Stage 2: Build --- FROM deps AS build COPY src ./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"]