# 资金服务平台 - 统一 Dockerfile # 多阶段构建:Maven 构建 + JRE 运行 # ==================== 构建阶段 ==================== FROM maven:3.9-eclipse-temurin-21-alpine AS builder WORKDIR /build # 复制 Maven 配置文件(利用缓存加速构建) COPY pom.xml . COPY fund-common/pom.xml fund-common/ COPY fund-gateway/pom.xml fund-gateway/ COPY fund-sys/pom.xml fund-sys/ COPY fund-cust/pom.xml fund-cust/ COPY fund-proj/pom.xml fund-proj/ COPY fund-req/pom.xml fund-req/ COPY fund-exp/pom.xml fund-exp/ COPY fund-receipt/pom.xml fund-receipt/ COPY fund-report/pom.xml fund-report/ COPY fund-file/pom.xml fund-file/ # 下载依赖(利用 Docker 缓存) RUN mvn dependency:go-offline -B || true # 复制源代码 COPY fund-common/ fund-common/ COPY fund-gateway/ fund-gateway/ COPY fund-sys/ fund-sys/ COPY fund-cust/ fund-cust/ COPY fund-proj/ fund-proj/ COPY fund-req/ fund-req/ COPY fund-exp/ fund-exp/ COPY fund-receipt/ fund-receipt/ COPY fund-report/ fund-report/ COPY fund-file/ fund-file/ # 构建参数:指定要构建的模块 ARG MODULE=fund-sys RUN mvn clean package -pl ${MODULE} -am -DskipTests -B # ==================== 运行阶段 ==================== FROM eclipse-temurin:21-jre-alpine # 安装必要工具 RUN apk add --no-cache curl tzdata && \ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone && \ apk del tzdata # 创建非 root 用户 RUN addgroup -S appgroup && adduser -S appuser -G appgroup WORKDIR /app # 构建参数 ARG MODULE=fund-sys ARG VERSION=0.0.1-SNAPSHOT # 从构建阶段复制 JAR 包 COPY --from=builder /build/${MODULE}/target/${MODULE}-${VERSION}.jar app.jar # 设置权限 RUN chown -R appuser:appgroup /app # 切换非 root 用户 USER appuser # JVM 参数 ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError" ENV SPRING_PROFILES_ACTIVE="docker" # 暴露端口(默认 8080,实际端口由服务决定) EXPOSE 8080 # 健康检查 HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD curl -f http://localhost:${SERVER_PORT:-8080}/actuator/health || exit 1 # 启动命令 ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar"]