# 多阶段构建 - 构建阶段 FROM m.daocloud.io/docker.io/library/maven:latest AS builder # 设置工作目录 WORKDIR /app # 复制 pom.xml 文件以利用 Docker 缓存 COPY pom.xml . COPY qaup-admin/pom.xml qaup-admin/ COPY qaup-framework/pom.xml qaup-framework/ COPY qaup-system/pom.xml qaup-system/ COPY qaup-quartz/pom.xml qaup-quartz/ COPY qaup-generator/pom.xml qaup-generator/ COPY qaup-common/pom.xml qaup-common/ COPY qaup-collision/pom.xml qaup-collision/ # 下载依赖(利用 Docker 缓存) RUN mvn dependency:go-offline -B # 复制源代码 COPY . . # 构建应用 RUN mvn clean package -DskipTests -B # 运行阶段 FROM m.daocloud.io/docker.io/library/eclipse-temurin:17-jre # 安装必要的工具和字体(支持中文) RUN apt-get update && apt-get install -y \ curl \ netcat-openbsd \ fontconfig \ fonts-dejavu-core \ && rm -rf /var/lib/apt/lists/* # 创建应用用户(安全考虑) RUN groupadd -r qaup && useradd -r -g qaup qaup # 设置工作目录 WORKDIR /app # 创建必要的目录 RUN mkdir -p /app/logs /app/uploadPath && \ chown -R qaup:qaup /app # 从构建阶段复制 JAR 文件 COPY --from=builder /app/qaup-admin/target/qaup-admin.jar app.jar # 复制启动脚本 COPY deploy/docker/start.sh /app/start.sh RUN chmod +x /app/start.sh && chown qaup:qaup /app/start.sh # 切换到非 root 用户 USER qaup # 暴露端口 EXPOSE 8080 # 健康检查 HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD curl -f http://localhost:8080/actuator/health || exit 1 # 启动应用 ENTRYPOINT ["/app/start.sh"]