# 使用多阶段构建优化镜像大小 FROM openjdk:17-jdk-slim as builder # 设置工作目录 WORKDIR /app # 复制Maven配置文件 COPY pom.xml . COPY .mvn .mvn COPY mvnw . # 下载依赖(利用Docker缓存层) RUN ./mvnw dependency:go-offline -B # 复制源代码 COPY src ./src # 构建应用 RUN ./mvnw clean package -DskipTests # 运行时镜像 FROM openjdk:17-jre-slim # 设置时区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 创建非root用户 RUN groupadd -r spring && useradd -r -g spring spring # 创建应用目录 WORKDIR /app # 从构建阶段复制jar文件 COPY --from=builder /app/target/*.jar app.jar # 创建日志目录 RUN mkdir -p /app/logs && chown -R spring:spring /app # 切换到非root用户 USER spring # 暴露端口 EXPOSE 8080 # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ CMD curl -f http://localhost:8080/api/health || exit 1 # JVM调优参数 ENV JAVA_OPTS="-server -Xms256m -Xmx512m -XX:+UseG1GC -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0" # 启动应用 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar"]