mirror of
https://github.com/spring-projects/spring-petclinic.git
synced 2025-12-27 19:07:28 +00:00
88 lines
2.6 KiB
Docker
88 lines
2.6 KiB
Docker
# syntax=docker/dockerfile:1.6
|
|
|
|
ARG JAVA_VERSION=21
|
|
ARG MAVEN_IMAGE=maven:3.9-eclipse-temurin-${JAVA_VERSION}
|
|
ARG JDK_IMAGE=eclipse-temurin:${JAVA_VERSION}-jdk
|
|
ARG RUNTIME_IMAGE=eclipse-temurin:${JAVA_VERSION}-jre
|
|
|
|
# =========================
|
|
# 1) Build
|
|
# =========================
|
|
FROM ${MAVEN_IMAGE} AS builder
|
|
WORKDIR /app
|
|
|
|
COPY pom.xml ./
|
|
RUN --mount=type=cache,target=/root/.m2 \
|
|
mvn -q -DskipTests dependency:go-offline
|
|
|
|
COPY . .
|
|
RUN --mount=type=cache,target=/root/.m2 \
|
|
mvn -q -DskipTests clean package
|
|
|
|
RUN set -eux; \
|
|
JAR="$(ls -1 target/*.jar | head -n 1)"; \
|
|
test -n "$JAR"; \
|
|
cp -f "$JAR" /app/app.jar
|
|
|
|
# =========================
|
|
# 2) Whatap Agent stage
|
|
# =========================
|
|
FROM ${JDK_IMAGE} AS whatap_agent
|
|
WORKDIR /work
|
|
|
|
COPY whatap/whatap.agent.java.tar.gz /tmp/whatap.agent.java.tar.gz
|
|
COPY paramkey.txt /tmp/paramkey.txt
|
|
|
|
RUN set -eux; \
|
|
mkdir -p /whatap; \
|
|
tar -xzf /tmp/whatap.agent.java.tar.gz -C /whatap; \
|
|
rm -f /tmp/whatap.agent.java.tar.gz; \
|
|
AGENT_JAR="$(find /whatap -maxdepth 6 -type f \
|
|
\( -name 'whatap.agent*.jar' -o -name '*whatap*agent*.jar' \) | head -n 1)"; \
|
|
test -n "$AGENT_JAR"; \
|
|
cp -f "$AGENT_JAR" /whatap/whatap.agent.jar; \
|
|
cp -f /tmp/paramkey.txt /whatap/paramkey.txt; \
|
|
chmod -R a=rX /whatap
|
|
|
|
# =========================
|
|
# 3) Runtime (fallback-first: temurin JRE)
|
|
# =========================
|
|
# 기본 목표는 “정상 기동”이므로 디버깅이 용이한 eclipse-temurin JRE를 사용한다.
|
|
# distroless/jlink 최적화는 별도 커밋에서 재적용한다.
|
|
FROM ${RUNTIME_IMAGE}
|
|
WORKDIR /app
|
|
|
|
COPY --from=builder /app/app.jar /app/app.jar
|
|
COPY --from=whatap_agent /whatap /whatap
|
|
|
|
ENV JAVA_TOOL_OPTIONS="" \
|
|
JAVA_OPTS="" \
|
|
ENABLE_WHATAP=false \
|
|
WHATAP_HOME=/whatap
|
|
|
|
# ENTRYPOINT wrapper: ENABLE_WHATAP=true 일 때만 agent 옵션을 추가한다.
|
|
COPY <<'EOF' /entrypoint.sh
|
|
#!/bin/sh
|
|
set -eu
|
|
|
|
JAVA_ARGS=${JAVA_OPTS:-}
|
|
case "${ENABLE_WHATAP:-false}" in
|
|
true|TRUE|True)
|
|
JAVA_ARGS="$JAVA_ARGS -javaagent:/whatap/whatap.agent.jar"
|
|
JAVA_ARGS="$JAVA_ARGS -Dwhatap.paramkey=/whatap/paramkey.txt"
|
|
JAVA_ARGS="$JAVA_ARGS -Dwhatap.server.host=${WHATAP_SERVER_HOST:-}"
|
|
JAVA_ARGS="$JAVA_ARGS -Dlicense=${WHATAP_LICENSE:-}"
|
|
JAVA_ARGS="$JAVA_ARGS -Dwhatap.micro.enabled=${WHATAP_MICRO_ENABLED:-}"
|
|
JAVA_ARGS="$JAVA_ARGS --add-opens=java.base/java.lang=ALL-UNNAMED"
|
|
;;
|
|
esac
|
|
|
|
exec java $JAVA_ARGS -XX:+UseContainerSupport -XX:MaxRAMPercentage=75 \
|
|
-XX:+ExitOnOutOfMemoryError -XX:+AlwaysActAsServerClassMachine \
|
|
-jar /app/app.jar
|
|
EOF
|
|
|
|
RUN chmod +x /entrypoint.sh
|
|
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["/entrypoint.sh"]
|