diff --git a/backend/Dockerfile b/backend/Dockerfile index 33fe810a..a6cd524e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,9 +1,16 @@ -FROM eclipse-temurin:21-jdk - +FROM eclipse-temurin:21-jdk AS builder WORKDIR /app -EXPOSE 8080 +# 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 -# Source code and mvnw are mounted via docker-compose volume at runtime. -# Maven dependencies are cached in a named volume (~/.m2). -CMD ["./mvnw", "spring-boot:run"] +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"] diff --git a/docker-compose.yml b/docker-compose.yml index 0637d417..ce7cdf73 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -112,9 +112,7 @@ services: container_name: archive-backend restart: unless-stopped volumes: - - ./backend:/app - ./import:/import - - maven_cache:/root/.m2 depends_on: db: condition: service_healthy @@ -191,6 +189,5 @@ networks: volumes: frontend_node_modules: - maven_cache: ocr_models: ocr_cache: