Files
svn-log-tool/Dockerfile
T

64 lines
2.3 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# Docker 镜像仓库加速(默认使用 docker.1ms.run 国内代理)
# 如需切换回 Docker Hub
# docker compose build --build-arg REGISTRY_MIRROR=docker.io/library
# ============================================================
ARG REGISTRY_MIRROR=docker.1ms.run/library
# ============================================================
# Stage 1: 前端构建(Vue 3 + Vite
# ============================================================
FROM ${REGISTRY_MIRROR}/node:22-alpine AS frontend-builder
WORKDIR /frontend
COPY frontend-vue/package.json frontend-vue/package-lock.json ./
RUN npm ci
COPY frontend-vue/ ./
RUN npm run build
# ============================================================
# Stage 2: 后端构建(Maven + Java 8
# ============================================================
FROM ${REGISTRY_MIRROR}/maven:3.9.6-eclipse-temurin-8 AS builder
# Maven JVM 调优:增大堆内存、启用并行
ENV MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m -Djava.util.concurrent.ForkJoinPool.common.parallelism=4"
WORKDIR /app
# 使用阿里云 Maven 镜像加速依赖下载(替换 Maven Central
COPY maven-settings.xml /root/.m2/settings.xml
COPY pom.xml .
RUN --mount=type=cache,target=/root/.m2 \
mvn -B -DskipTests -T 1C dependency:go-offline
COPY src ./src
# 将前端构建产物注入静态资源目录(Maven 会自动打包进 jar)
# vite.config.js 中 outDir 为相对 __dirname 的路径,容器内 __dirname=/frontend
COPY --from=frontend-builder /src/main/resources/static/v2 /app/src/main/resources/static/v2
# 前端产物已由 frontend-builder 阶段构建并 COPY 进来;
# 此阶段不含 frontend-vue/,且离线模式无法下载 Node,必须跳过前端构建。
# -T 1C: 按 CPU 核数并行; -o: 离线模式(依赖已缓存,跳过元数据检查)
RUN --mount=type=cache,target=/root/.m2 \
mvn -B -DskipTests -T 1C -o clean package -Dskip.frontend.build=true
# ============================================================
# Stage 3: 运行镜像(最小化 JRE)
# ============================================================
FROM ${REGISTRY_MIRROR}/eclipse-temurin:8-jre-alpine
WORKDIR /app
COPY --from=builder /app/target/svn-log-tool-1.0.0-jar-with-dependencies.jar app.jar
EXPOSE 18088
ENTRYPOINT ["java", "-jar", "/app/app.jar"]