-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDockerfile
More file actions
61 lines (49 loc) · 2.09 KB
/
Copy pathDockerfile
File metadata and controls
61 lines (49 loc) · 2.09 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# syntax=docker/dockerfile:1.7-labs
#############################
# Stage 1: Build with Gradle
#############################
FROM gradle:9.0.0-jdk21 AS builder
WORKDIR /src
COPY .git ./.git
# Копируем только файлы сборки для кеша
COPY settings.gradle.kts build.gradle.kts gradle.properties ./
# Прогрев зависимостей
RUN --mount=type=cache,target=/home/gradle/.gradle \
gradle --no-daemon --stacktrace dependencies
# Исходники и сборка WAR (без тестов)
COPY src ./src
RUN --mount=type=cache,target=/home/gradle/.gradle \
gradle --no-daemon clean war -x test
#############################
# Stage 2: Runtime (Tomcat+JDK21 Temurin Noble)
#############################
FROM tomcat:9.0.109-jdk21-temurin-noble
# Очистить дефолтные webapps
RUN rm -rf "$CATALINA_HOME/webapps/*"
# Разворачиваем наш WAR как ROOT
COPY --from=builder /src/build/libs/TrackStudio.war "$CATALINA_HOME/webapps/ROOT.war"
# Заводим пользователя tomcat (в этом образе его нет)
RUN set -eux; \
groupadd -r tomcat || true; \
useradd -r -g tomcat -d "$CATALINA_HOME" -s /usr/sbin/nologin tomcat || true; \
# каталоги для логов, временных файлов и данных
mkdir -p /logs "$CATALINA_HOME/logs" "$CATALINA_HOME/work" "$CATALINA_HOME/temp" \
/data/trackstudio/upload /data/trackstudio/index; \
chown -R tomcat:tomcat \
"$CATALINA_HOME/webapps" \
"$CATALINA_HOME/logs" \
"$CATALINA_HOME/work" \
"$CATALINA_HOME/temp" \
/logs /data/trackstudio
# JVM/Tomcat настройки
ENV CATALINA_OPTS="\
-Dfile.encoding=UTF-8 \
-Dtrackstudio.upload.dir=/data/trackstudio/upload \
-Dtrackstudio.index.dir=/data/trackstudio/index"
WORKDIR $CATALINA_HOME
USER tomcat
EXPOSE 8080
# Healthcheck: проверяем доступность корневой страницы
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
CMD curl -f http://localhost:8080/ || exit 1
CMD ["catalina.sh", "run"]