# Используем официальный образ OpenJDK 21 для сборки FROM openjdk:21-jdk-slim as builder # Устанавливаем рабочую директорию WORKDIR /app # Копируем файлы Maven COPY mvnw . COPY mvnw.cmd . COPY .mvn .mvn COPY pom.xml . # Делаем mvnw исполняемым RUN chmod +x ./mvnw # Скачиваем зависимости (этот слой будет кешироваться если 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 # Переключаемся на непривилегированного пользователя USER appuser # Открываем порт 80 (как указано в application.yml) EXPOSE 80 # Устанавливаем переменные окружения для JVM ENV JAVA_OPTS="-Xmx512m -Xms256m" # Команда запуска приложения ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]