🐳
Deployment & DevOps

Dockerizing Spring Boot Apps

Multi-Stage Builds, Buildpacks
💡 Multi-stage Docker build, EK RESTAURANT KITCHEN ki tarah hai — PREP KITCHEN (BUILD STAGE) mein, SAARE TOOLS (Maven, JDK compiler) use hote hain, MESS hoती hai. FINAL SERVING PLATE (RUN STAGE) par, SIRF READY DISH (COMPILED JAR) jaati hai, PREP KITCHEN ka MESS NAHI.

Spring Boot applications, DOCKER CONTAINERS mein, WIDELY DEPLOY hoती hain — CONSISTENT ENVIRONMENT (DEV = PROD), aur EASY SCALING (Kubernetes ke saath). NAIVE Dockerfile, BUILD TOOLS (Maven, FULL JDK) ko bhi FINAL IMAGE mein INCLUDE kar deta hai, JISSE IMAGE SIZE UNNECESSARY BADA ho jaata hai.

MULTI-STAGE Dockerfile, is PROBLEM ko SOLVE karta hai — FIRST STAGE mein, APPLICATION BUILD hoti hai (BUILD TOOLS ke saath). SECOND STAGE, EK LIGHTWEIGHT BASE IMAGE (SIRF JRE, JDK nahi) use karta hai, aur SIRF FINAL JAR COPY karta hai — FINAL IMAGE, SIGNIFICANTLY CHHOTI, SECURE, aur FAST-TO-DEPLOY hoती hai.

# Dockerfile — multi-stage build:
FROM eclipse-temurin:17-jdk AS build
WORKDIR /app
COPY . .
RUN ./mvnw clean package -DskipTests

FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

# Build aur run:
docker build -t myapp:latest .
docker run -p 8080:8080 -e SPRING_PROFILES_ACTIVE=prod myapp:latest
🐳
Multi-stage Docker build, EK RESTAURANT KITCHEN ki tarah hai — PREP KITCHEN (BUILD STAGE) mein, SAARE TOOLS (Maven, JDK compiler) use hote hain, MESS hoती hai. FINAL SERVING PLATE (RUN STAGE) par, SIRF READY DISH (COMPILED JAR) jaati hai, PREP KITCHEN ka MESS NAHI.
1 / 2
⚡ झट से Recap
  • Multi-stage builds = BUILD tools SEPARATE, FINAL image mein SIRF JRE + JAR
  • Smaller image = FASTER pull, DEPLOY, aur LESS attack surface
  • spring-boot:build-image = Dockerfile ke BINA, AUTOMATIC, optimized image
इस page में (2 subtopics)

MULTI-STAGE Dockerfile se, FIRST STAGE mein APPLICATION BUILD hoti hai (Maven/Gradle TOOLS ke saath, JO IMAGE ko BADA BANATE hain), aur SECOND STAGE mein, SIRF FINAL JAR, EK LIGHTWEIGHT BASE IMAGE mein COPY hoती hai — FINAL IMAGE SIZE SIGNIFICANTLY CHHOTI hoती hai.

# Stage 1: Build
FROM eclipse-temurin:17-jdk AS build
COPY . /app
WORKDIR /app
RUN ./mvnw package -DskipTests

# Stage 2: Run (lightweight)
FROM eclipse-temurin:17-jre
COPY --from=build /app/target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

Spring Boot MAVEN/GRADLE PLUGIN, BUILT-IN CLOUD NATIVE BUILDPACKS SUPPORT DETA hai — DOCKERFILE MANUALLY LIKHNE ke BAJAYE, EK SINGLE COMMAND se, OPTIMIZED DOCKER IMAGE GENERATE ho sakti hai.

./mvnw spring-boot:build-image
# Automatically ek OPTIMIZED, LAYERED Docker image BAN jaati hai,
# bina EK LINE Dockerfile likhे