# ===== Build Stage ===== FROM maven:3.9.6-eclipse-temurin-21 AS builder WORKDIR /build # Copy pom.xml first for better layer caching COPY pom.xml . RUN mvn dependency:go-offline -B # Copy source code COPY src ./src # Build the application RUN mvn clean package -DskipTests -B # ===== Runtime Stage ===== FROM eclipse-temurin:21-jre-jammy WORKDIR /app # Create non-root user RUN groupadd --system spring && \ useradd --system --gid spring --create-home spring # Copy the JAR from build stage COPY --from=builder --chown=spring:spring /build/target/*.jar app.jar # Switch to non-root user USER spring # Expose Spring Boot default port EXPOSE 8080 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ CMD curl -f http://localhost:8080/actuator/health || exit 1 # Run the application ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=75.0", "-jar", "app.jar"]