diff --git a/Dockerfile b/Dockerfile index 83ae0c0..e4db24c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,50 +1,29 @@ -# Используем официальный образ OpenJDK 21 для сборки -FROM openjdk:21-jdk-slim as builder +FROM maven:3.9.9-eclipse-temurin-21 AS build +WORKDIR /app +COPY ./pom.xml ./ +RUN mvn dependency:resolve +COPY . . +RUN mvn clean install -DskipTests -# Устанавливаем рабочую директорию +FROM openjdk:21-jdk-slim + +# Create a non-root user and group for security +RUN groupadd -r appgroup && useradd -r -s /bin/false -g appgroup appuser + +# Create a directory for heap dumps and give ownership to the new user +RUN mkdir /dumps && chown appuser:appgroup /dumps + +# Set the working directory WORKDIR /app -# Копируем файлы Maven -COPY mvnw . -COPY mvnw.cmd . -COPY .mvn .mvn -COPY pom.xml . +# Copy the application jar from the build stage +COPY --from=build /app/target/*.jar app.jar -# Делаем mvnw исполняемым -RUN chmod +x ./mvnw +# Change ownership of the application files to the non-root user +RUN chown appuser:appgroup app.jar -# Скачиваем зависимости (этот слой будет кешироваться если pom.xml не изменился) -RUN ./mvnw dependency:go-offline -B - -# Копируем исходный код -COPY src src - -# Собираем приложение -RUN ./mvnw clean package -DskipTests - -# Создаем финальный образ -FROM openjdk:21-jre-slim - -# Устанавливаем рабочую директорию -WORKDIR /app - -# Создаем пользователя для безопасности -RUN groupadd -r appuser && useradd -r -g appuser appuser - -# Копируем собранный JAR файл из builder образа -COPY --from=builder /app/target/*.jar app.jar - -# Меняем владельца файла -RUN chown appuser:appuser app.jar - -# Переключаемся на непривилегированного пользователя +# Switch to the non-root user USER appuser -# Открываем порт 80 (как указано в application.yml) -EXPOSE 80 - -# Устанавливаем переменные окружения для JVM -ENV JAVA_OPTS="-Xmx512m -Xms256m" - -# Команда запуска приложения -ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] +# Run the jar file with JVM flags for heap dump generation on OutOfMemoryError +ENTRYPOINT ["java", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/dumps/heap.hprof", "-jar", "app.jar"] \ No newline at end of file