-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
39 lines (30 loc) · 2.17 KB
/
Dockerfile
File metadata and controls
39 lines (30 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# --- Этап 1: Сборка приложения ---
# Используем полный JDK образ для компиляции исходного кода
# Это позволяет собирать приложение внутри контейнера Docker
FROM eclipse-temurin:21-jdk-alpine AS build
# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /app
# Копируем файлы сборки Maven/Gradle (например, pom.xml, .mvnw, src и т.д.)
# Сначала копируем pom.xml, чтобы Maven мог загрузить зависимости,
# что ускоряет сборку, если зависимости не изменились
COPY pom.xml .
# Копируем скрипты Maven Wrapper, если используете
COPY mvnw .
COPY .mvn .mvn
# Копируем весь исходный код
COPY src src
# Собираем приложение, пропуская тесты для более быстрой сборки образа
RUN ./mvnw clean package -DskipTests
# --- Этап 2: Создание итогового, легкого образа ---
# Используем образ только с JRE (Java Runtime Environment), так как он намного меньше
# и содержит только то, что нужно для запуска приложения, а не для его компиляции
FROM eclipse-temurin:21-jre-alpine
# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /app
# Копируем скомпилированный JAR-файл с первого этапа сборки в итоговый образ
# Это гарантирует, что в итоговом образе нет инструментов сборки, только приложение
COPY --from=build /app/target/*.jar app.jar
# Документируем порт, который приложение слушает
EXPOSE 8080
# Определяем команду, которая будет выполняться при запуске контейнера
ENTRYPOINT ["java", "-jar", "app.jar"]