Dockerfile 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # --- 第一阶段:构建阶段 ---
  2. FROM registry.cn-chengdu.aliyuncs.com/azysrv/maven:3.9.6-eclipse-temurin-21 AS builder
  3. WORKDIR /app
  4. # 创建并写入阿里云镜像配置到容器的 settings.xml
  5. RUN mkdir -p /root/.m2 && \
  6. echo '<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" \
  7. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
  8. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> \
  9. <mirrors> \
  10. <mirror> \
  11. <id>aliyunmaven</id> \
  12. <mirrorOf>external:*,!jitpack.io</mirrorOf> \
  13. <name>Aliyun Maven</name> \
  14. <url>https://maven.aliyun.com/repository/public</url> \
  15. </mirror> \
  16. </mirrors> \
  17. </settings>' > /root/.m2/settings.xml
  18. # 1. 复制所有 pom.xml
  19. COPY pom.xml .
  20. COPY common/pom.xml common/
  21. COPY agent/pom.xml agent/
  22. COPY mgr/pom.xml mgr/
  23. # 2. 【关键】利用 go-offline 提前下载并缓存所有依赖
  24. # 这一步会根据上面的 pom.xml 下载依赖。只要 pom 不变,这一层永远使用缓存
  25. #RUN mvn dependency:go-offline -B
  26. RUN mvn clean compile -DskipTests
  27. # 3. 复制源代码(此时代码变动,只会触发从这里开始的层,前面的依赖层已缓存)
  28. COPY common/ common/
  29. COPY mgr/ mgr/
  30. COPY bin/mgr bin/mgr
  31. # 4. 执行构建
  32. RUN mvn clean install -DskipTests -pl common -am
  33. RUN mvn clean package -DskipTests -pl mgr -am
  34. # --- 第二阶段:运行阶段 ---
  35. FROM registry.cn-chengdu.aliyuncs.com/azysrv/eclipse-temurin:21-jre-alpine
  36. WORKDIR /app
  37. # 从构建阶段复制打包好的 JAR
  38. # 假设你的打包命名是 mgr-1.0-SNAPSHOT.jar,请根据实际情况调整
  39. COPY --from=builder /app/bin/mgr /app
  40. # 暴露端口(根据 mgr 实际端口修改)
  41. EXPOSE 4030
  42. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
  43. # 启动命令
  44. ENV JAVA_OPTS="-Xms2g -Xmx4g -XX:+UseG1GC"
  45. ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar ops-mgr.jar"]