# --- 第一阶段:构建阶段 --- FROM registry.cn-chengdu.aliyuncs.com/azysrv/maven:3.9.6-eclipse-temurin-21 AS builder WORKDIR /app # 创建并写入阿里云镜像配置到容器的 settings.xml RUN mkdir -p /root/.m2 && \ echo ' \ \ \ aliyunmaven \ external:*,!jitpack.io \ Aliyun Maven \ https://maven.aliyun.com/repository/public \ \ \ ' > /root/.m2/settings.xml # 1. 复制所有 pom.xml COPY pom.xml . COPY common/pom.xml common/ COPY agent/pom.xml agent/ COPY mgr/pom.xml mgr/ # 2. 【关键】利用 go-offline 提前下载并缓存所有依赖 # 这一步会根据上面的 pom.xml 下载依赖。只要 pom 不变,这一层永远使用缓存 #RUN mvn dependency:go-offline -B RUN mvn clean compile -DskipTests&& \ mvn de.qaware.maven:go-offline-maven-plugin:resolve-dependencies || true # 3. 复制源代码(此时代码变动,只会触发从这里开始的层,前面的依赖层已缓存) COPY common/ common/ COPY agent/ agent/ COPY bin/agent bin/agent # 4. 执行构建 RUN mvn clean install -DskipTests -pl common -am RUN mvn clean package -DskipTests -pl agent -am # --- 第二阶段:运行阶段 --- FROM registry.cn-chengdu.aliyuncs.com/azysrv/eclipse-temurin:21-jre-alpine WORKDIR /app COPY --from=builder /app/bin/agent /app RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone COPY bin/agent/ /app/ ENV JAVA_OPTS="-Xms64m -Xmx128m -XX:+UseSerialGC -XX:MaxMetaspaceSize=64m" ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar ops-agent.jar agent.json"]