🍃 Spring Boot Intermediate

What is Spring Boot with Docker?

Answer

Containerizing Spring Boot applications with Docker: Simple Dockerfile: FROM eclipse-temurin:21-jre-alpine WORKDIR /app COPY target/myapp.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]. Optimized multi-stage Dockerfile: FROM maven:3.9-eclipse-temurin-21 AS builder WORKDIR /build COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests FROM eclipse-temurin:21-jre-alpine WORKDIR /app COPY --from=builder /build/target/*.jar app.jar EXPOSE 8080 USER nonroot:nonroot ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]. Layered JARs (Spring Boot 2.3+): Spring Boot creates layered JARs for better Docker layer caching (dependencies rarely change, application code changes often): FROM eclipse-temurin:21-jre-alpine AS builder WORKDIR /app COPY target/*.jar app.jar RUN java -Djarmode=layertools -jar app.jar extract FROM eclipse-temurin:21-jre-alpine WORKDIR /app COPY --from=builder /app/dependencies/ ./ COPY --from=builder /app/spring-boot-loader/ ./ COPY --from=builder /app/snapshot-dependencies/ ./ COPY --from=builder /app/application/ ./ ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"]. Spring Boot Maven plugin (Buildpacks): mvn spring-boot:build-image -Dspring-boot.build-image.imageName=myapp:1.0 — builds OCI image without Dockerfile using Cloud Native Buildpacks. Environment configuration: pass env vars: docker run -e SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/prod -e SPRING_PROFILES_ACTIVE=prod myapp:1.0. Health checks in docker-compose: healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] interval: 30s timeout: 10s retries: 3.