Performance: Multi-stage Docker builds
This affects page load speed by reducing container image size and startup time, improving deployment speed and runtime performance.
FROM maven:3.9.0-eclipse-temurin-17 AS build COPY pom.xml /app/ COPY src /app/src/ WORKDIR /app RUN mvn clean package -DskipTests FROM eclipse-temurin:17-jre COPY --from=build /app/target/*.jar /app/app.jar CMD ["java", "-jar", "/app/app.jar"]
FROM openjdk:17 COPY . /app WORKDIR /app RUN ./mvnw package CMD ["java", "-jar", "target/app.jar"]
| Pattern | Image Size | Build Time | Startup Time | Verdict |
|---|---|---|---|---|
| Single-stage build with full source | Large (500+ MB) | Long (includes build tools) | Slow (large image load) | [X] Bad |
| Multi-stage build with separate build/runtime | Small (50-100 MB) | Moderate (build stage only) | Fast (small image load) | [OK] Good |
FROM maven:3.8.6-openjdk-17 AS builder WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests FROM openjdk:17-jdk-slim COPY --from=builder /app/target/myapp.jar /app/myapp.jar ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]What will be the size impact of this multi-stage build compared to a single-stage build including Maven?
FROM openjdk:17 AS builder WORKDIR /app COPY . . RUN ./mvnw package FROM openjdk:17-jdk-slim COPY /app/target/app.jar /app/app.jar ENTRYPOINT ["java", "-jar", "/app/app.jar"]
Pass the test and this pattern moves unknown