# Permission Service Dockerfile FROM eclipse-temurin:17-jdk-alpine AS builder WORKDIR /app # Copy Maven wrapper and pom.xml COPY pom.xml . COPY .mvn .mvn COPY mvnw . # Download dependencies RUN chmod +x mvnw && ./mvnw dependency:go-offline -B # Copy source code COPY src ./src # Build the application RUN ./mvnw package -DskipTests -B # Runtime stage FROM eclipse-temurin:17-jre-alpine WORKDIR /app # Create non-root user RUN addgroup -g 1001 -S appgroup && \ adduser -u 1001 -S appuser -G appgroup # Copy the built jar COPY --from=builder /app/target/*.jar app.jar # Set ownership RUN chown -R appuser:appgroup /app USER appuser # Expose port EXPOSE 8084 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8084/actuator/health || exit 1 # JVM optimization for containers ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:+UseG1GC -XX:+ExitOnOutOfMemoryError" ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]