Replace runtime mvn spring-boot:run with a proper multi-stage build: - Stage 1 (builder): compiles JAR with BuildKit cache mount for ~/.m2 - Stage 2 (runtime): eclipse-temurin:21-jre with only the JAR Removes the backend source volume mount and maven_cache named volume. Deploy with: docker compose up -d --build Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
17 lines
468 B
Docker
17 lines
468 B
Docker
FROM eclipse-temurin:21-jdk AS builder
|
|
WORKDIR /app
|
|
|
|
# Copy wrapper and POM first — dependency layer is cached separately from source
|
|
COPY .mvn .mvn
|
|
COPY mvnw pom.xml ./
|
|
RUN --mount=type=cache,target=/root/.m2 ./mvnw dependency:go-offline -q
|
|
|
|
COPY src ./src
|
|
RUN --mount=type=cache,target=/root/.m2 ./mvnw clean package -DskipTests -q
|
|
|
|
FROM eclipse-temurin:21-jre
|
|
WORKDIR /app
|
|
COPY --from=builder /app/target/*.jar app.jar
|
|
EXPOSE 8080
|
|
CMD ["java", "-jar", "app.jar"]
|