# ============================================ # 后端 Docker 镜像 — 多阶段构建 # Stage 1: Maven 编译(不污染宿主) # Stage 2: JRE 运行(精简镜像) # ============================================ # ---- Stage 1: 编译 ---- FROM maven:3.9-eclipse-temurin-17 AS builder WORKDIR /build # 先复制 pom.xml,利用 Docker 缓存加速依赖下载 COPY pom.xml ./ COPY test-base-core/pom.xml test-base-core/ COPY test-module-system/pom.xml test-module-system/ COPY test-module-system/test-system-api/pom.xml test-module-system/test-system-api/ COPY test-module-system/test-system-biz/pom.xml test-module-system/test-system-biz/ COPY test-module-system/test-system-start/pom.xml test-module-system/test-system-start/ COPY test-module-business/pom.xml test-module-business/ # 下载依赖(这一层在 pom 不变时会被缓存) RUN mvn dependency:go-offline -B || true # 复制全部源码 COPY . . # 编译打包(跳过测试) RUN mvn package -Dmaven.test.skip=true -T 1C # ---- Stage 2: 运行 ---- FROM eclipse-temurin:17-jre LABEL maintainer="ghb-base deploy" # 时区(Debian 系) ENV TZ=Asia/Shanghai RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime WORKDIR /app # 从编译阶段复制 fat jar COPY --from=builder /build/test-module-system/test-system-start/target/*.jar app.jar # 上传文件目录 RUN mkdir -p /opt/upFiles EXPOSE 8081 # JVM 参数可通过环境变量 JAVA_OPTS 覆盖 ENV JAVA_OPTS="-Xms512m -Xmx512m" ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]