36 lines
1.4 KiB
Docker
36 lines
1.4 KiB
Docker
# ---------- 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"] |