# ---------- build stage ---------- FROM gradle:8.9.0-jdk17-alpine AS build WORKDIR /app # Копируем wrapper + его папку (важно, что это две разные сущности) COPY --chown=gradle:gradle gradlew ./gradlew COPY --chown=gradle:gradle gradle/ ./gradle/ # Копируем скрипты сборки и исходники COPY --chown=gradle:gradle build.gradle.kts settings.gradle.kts ./ COPY --chown=gradle:gradle src ./src # Делаем gradlew исполняемым RUN chmod +x gradlew # Подкачаем зависимости (кэшируется) и соберём jar RUN ./gradlew --no-daemon dependencies RUN ./gradlew --no-daemon clean bootJar # ---------- run stage ---------- FROM eclipse-temurin:17-jre AS runtime WORKDIR /app # (Опционально) установим curl для HEALTHCHECK USER root RUN apt-get update && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/* RUN groupadd --system --gid 1001 app && useradd --system --gid app --uid 1001 --shell /bin/bash --create-home app RUN mkdir -p /app/static && chown -R app:app /app USER app COPY --from=build /app/build/libs/*.jar /app/app.jar ENV JAVA_TOOL_OPTIONS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0" EXPOSE 8080 HEALTHCHECK --interval=20s --timeout=3s --retries=3 CMD curl -fsS http://localhost:8080/actuator/health || exit 1 ENTRYPOINT ["java","-jar","/app/app.jar"]