# syntax=docker/dockerfile:1 # # Единый multi-stage Dockerfile для всего LMS. # Сборка идёт внутри образа (Gradle + JDK 21), поэтому на сервере # достаточно Docker — устанавливать Java не требуется. # # Использование (см. docker-compose.prod.yml): # docker build --target web -t lms-web . # docker build --target identity -t lms-identity . # ---------- Стадия сборки ---------- FROM eclipse-temurin:21-jdk AS build WORKDIR /src # Сначала копируем файлы сборки — слой кэшируется отдельно от исходников. COPY gradlew gradlew COPY gradle gradle COPY settings.gradle.kts gradle.properties ./ COPY buildSrc buildSrc RUN chmod +x gradlew # Исходники модулей. COPY libs libs COPY services services COPY web web RUN --mount=type=cache,target=/root/.gradle \ ./gradlew --no-daemon bootJar -x test # ---------- Runtime-стадии (только JRE) ---------- FROM eclipse-temurin:21-jre AS identity WORKDIR /app ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx320m" COPY --from=build /src/services/identity-service/build/libs/identity-service-*.jar app.jar EXPOSE 8081 ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"] FROM eclipse-temurin:21-jre AS academic WORKDIR /app ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx384m" COPY --from=build /src/services/academic-service/build/libs/academic-service-*.jar app.jar EXPOSE 8082 ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"] FROM eclipse-temurin:21-jre AS progress WORKDIR /app ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx384m" COPY --from=build /src/services/progress-service/build/libs/progress-service-*.jar app.jar EXPOSE 8083 ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"] FROM eclipse-temurin:21-jre AS gateway WORKDIR /app ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx256m" COPY --from=build /src/services/gateway/build/libs/gateway-*.jar app.jar EXPOSE 8080 ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"] FROM eclipse-temurin:21-jre AS web WORKDIR /app ENV TZ=Europe/Moscow JAVA_OPTS="-Xmx320m" COPY --from=build /src/web/build/libs/web-*.jar app.jar EXPOSE 8090 ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]