Files

76 lines
3.0 KiB
Docker
Raw Permalink 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_REGISTRY_MIRROR=docker.io/library make up
# ============================================================
ARG REGISTRY_MIRROR=docker.1ms.run/library
# 内部/开发用途,推荐通过 make fast-up 触发快速构建
ARG FAST_BUILD=false
# ============================================================
# 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 --mount=type=cache,target=/root/.npm 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-base
# Maven JVM 调优:增大堆内存、启用并行
ENV MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m -Djava.util.concurrent.ForkJoinPool.common.parallelism=4"
WORKDIR /app
# 使用阿里云 Maven 镜像加速依赖下载(避免被 /root/.m2 缓存挂载点隐藏)
COPY maven-settings.xml /app/maven-settings.xml
COPY pom.xml .
RUN --mount=type=cache,target=/root/.m2 \
mvn -s /app/maven-settings.xml -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
# 默认构建分支(不缓存 /app/target,执行 clean
FROM builder-base AS builder-false
RUN --mount=type=cache,target=/root/.m2 \
mvn -s /app/maven-settings.xml -B -DskipTests -T 1C clean package -Dskip.frontend.build=true && \
cp /app/target/svn-log-tool-1.0.0-jar-with-dependencies.jar /app/svn-log-tool-1.0.0-jar-with-dependencies.jar
# 快速开发迭代构建分支(缓存 /app/target,不执行 clean
FROM builder-base AS builder-true
RUN --mount=type=cache,target=/root/.m2 \
--mount=type=cache,target=/app/target \
mvn -s /app/maven-settings.xml -B -DskipTests -T 1C package -Dskip.frontend.build=true && \
cp /app/target/svn-log-tool-1.0.0-jar-with-dependencies.jar /app/svn-log-tool-1.0.0-jar-with-dependencies.jar
# 根据 FAST_BUILD 的值决定最终作为 builder 的阶段
FROM builder-${FAST_BUILD} AS builder
# ============================================================
# Stage 3: 运行镜像(最小化 JRE)
# ============================================================
FROM ${REGISTRY_MIRROR}/eclipse-temurin:8-jre-alpine
WORKDIR /app
COPY --from=builder /app/svn-log-tool-1.0.0-jar-with-dependencies.jar app.jar
EXPOSE 18088
ENTRYPOINT ["java", "-jar", "/app/app.jar"]