# ---- 阶段 1: 使用 Maven Build ---- FROM maven:3.9.6-eclipse-temurin-21 AS builder WORKDIR /build # 先仅复制 pom.xml 用于依赖缓存 COPY flymoon-agent-api/pom.xml flymoon-agent-api/ COPY flymoon-agent-provider/pom.xml flymoon-agent-provider/ # 预下载所有依赖,pom 不变就不会重新下载 RUN mvn -B -f flymoon-agent-provider/pom.xml dependency:go-offline # 复制所有源码 COPY . . # 开始 Maven 构建 WORKDIR /build/flymoon-agent-provider RUN mvn clean package -DskipTests # ---- 阶段 2: 构建运行镜像 ---- # 使用 Java 21 精简镜像(含JDK,运行Spring Boot等Java应用) # FROM mirror.ccs.tencentyun.com/library/openjdk:21-jdk-slim AS runtime FROM eclipse-temurin:21-jre AS runtime # 配置环境变量 ENV APP_HOME=/app \ # 应用名称 APP_NAME=flymoon-agent \ # 默认启动环境sit,可被覆盖,外部使用-e or env SPRING_PROFILES_ACTIVE=xxx覆盖 SPRING_PROFILES_ACTIVE=sit \ # 阶段1构建后的产生的JAR文件位置 PRODUCT_DIR="/build/flymoon-agent-provider/target/" \ LANG=C.UTF-8 \ TZ=Asia/Shanghai \ JAVA_OPTS="" # 创建应用工作目录 WORKDIR ${APP_HOME} # 复制阶段1构建后的主应用JAR产物到容器工作目录 COPY --from=builder ${PRODUCT_DIR}${APP_NAME}.jar ${APP_HOME}/${APP_NAME}.jar # 暴露应用端口(Spring Boot Web 端口、 Dubbo RPC 服务端口、Dubbo QoS 监控端口等) EXPOSE 8070 20881 # 启动命令(支持外部传入JVM参数,如 -Xms512m -Xmx1024m) ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar $APP_HOME/$APP_NAME.jar --spring.profiles.active=$SPRING_PROFILES_ACTIVE"]