İçeriğe geç
dockerfile

Multi-Stage Spring Boot Dockerfile

Spring Boot uygulamaları için optimize edilmiş multi-stage Dockerfile. Layered JAR, non-root user ve health check dahil.

By Tolgahan · · 375 görüntülenme
dockerfile
# Stage 1: Build
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app

# Maven dependency cache (pom.xml değişmezse cache kullanılır)
COPY mvnw pom.xml ./
COPY .mvn .mvn
RUN ./mvnw dependency:go-offline -B

# Kaynak kodu kopyala ve build et
COPY src src
RUN ./mvnw package -DskipTests -B

# Stage 2: Extract layers (cache optimizasyonu için)
FROM eclipse-temurin:21-jdk-alpine AS extract
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
RUN java -Djarmode=layertools -jar app.jar extract

# Stage 3: Runtime (minimal image)
FROM eclipse-temurin:21-jre-alpine

# Güvenlik: non-root user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

WORKDIR /app

# Layered copy (en az değişen katman önce)
COPY --from=extract /app/dependencies/ ./
COPY --from=extract /app/spring-boot-loader/ ./
COPY --from=extract /app/snapshot-dependencies/ ./
COPY --from=extract /app/application/ ./

RUN chown -R appuser:appgroup /app
USER appuser

EXPOSE 8080

# Health check
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
    CMD wget -qO- http://localhost:8080/actuator/health || exit 1

# JVM container-aware flags
ENTRYPOINT ["java", \
    "-XX:+UseContainerSupport", \
    "-XX:MaxRAMPercentage=75.0", \
    "-Djava.security.egd=file:/dev/./urandom", \
    "org.springframework.boot.loader.launch.JarLauncher"]
Bu snippet'i göm
<iframe src="https://tolgahan.dev/snippets/multi-stage-spring-boot-dockerfile/embed" width="100%" height="400" frameborder="0"></iframe>
Paylaş: