Dockerfile.optimized 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # ============================================
  2. # Build stage - 精简版(假设common已预先安装到本地仓库)
  3. # ============================================
  4. FROM maven:3.8-openjdk-8 AS builder
  5. ARG BUILD_NUMBER=local
  6. ARG GIT_COMMIT=unknown
  7. ARG MAVEN_OPTS=-Dmaven.wagon.http.ssl.insecure=true
  8. ENV MAVEN_OPTS="${MAVEN_OPTS}"
  9. WORKDIR /build
  10. # 只复制 pom.xml 和源代码(common 从本地仓库获取)
  11. COPY pom.xml .
  12. COPY shop-recycle-common/pom.xml ./shop-recycle-common/pom.xml
  13. COPY shop-recycle-payment-service/ ./shop-recycle-payment-service/
  14. COPY shop-recycle-gateway/pom.xml ./shop-recycle-gateway/
  15. COPY shop-recycle-order-service/pom.xml ./shop-recycle-order-service/
  16. # 仅下载依赖(common 会从本地仓库的缓存获取)
  17. RUN mvn dependency:go-offline -B -q \
  18. -pl shop-recycle-payment-service \
  19. -am
  20. # 构建服务(跳过其他模块,只构建 payment-service)
  21. RUN mvn package -DskipTests -B -q \
  22. -pl shop-recycle-payment-service \
  23. -Dmaven.test.skip=true \
  24. -Ddocker.build.number=${BUILD_NUMBER} \
  25. -Dgit.commit=${GIT_COMMIT}
  26. # ============================================
  27. # Runtime stage
  28. # ============================================
  29. FROM openjdk:8-jre-alpine
  30. LABEL maintainer="shop-recycle"
  31. LABEL service="shop-recycle-payment-service"
  32. LABEL build.number=${BUILD_NUMBER}
  33. LABEL git.commit=${GIT_COMMIT}
  34. ENV TZ=Asia/Shanghai
  35. ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
  36. WORKDIR /app
  37. COPY --from=builder /build/shop-recycle-payment-service/target/*.jar payment-service.jar
  38. EXPOSE 8082
  39. HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  40. CMD wget --no-verbose --tries=1 --spider http://localhost:8082/health || exit 1
  41. ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar payment-service.jar"]