Dockerfile 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # ============================================
  2. # Build stage with incremental cache support
  3. # Alpine最小化镜像 + 官方镜像源
  4. # ============================================
  5. FROM maven:3.8-openjdk-8 AS builder
  6. ARG BUILD_NUMBER=local
  7. ARG GIT_COMMIT=unknown
  8. ARG MAVEN_OPTS=-Dmaven.wagon.http.ssl.insecure=true
  9. ENV MAVEN_OPTS="${MAVEN_OPTS}"
  10. WORKDIR /build
  11. # Copy parent pom first (if exists in multi-module project)
  12. COPY pom.xml .
  13. COPY shop-recycle-common/ shop-recycle-common/
  14. COPY shop-recycle-gateway/pom.xml shop-recycle-gateway/
  15. COPY shop-recycle-order-service/pom.xml shop-recycle-order-service/
  16. COPY shop-recycle-payment-service/pom.xml shop-recycle-payment-service/
  17. # Download dependencies (cached layer - only changes if pom.xml changes)
  18. RUN mvn dependency:go-offline -B -q
  19. # Copy sources
  20. COPY shop-recycle-payment-service/src shop-recycle-payment-service/src
  21. # Build with incremental compilation (no clean!)
  22. RUN mvn package -DskipTests -B -q \
  23. -pl shop-recycle-payment-service \
  24. -am \
  25. -Dmaven.test.skip=true \
  26. -Ddocker.build.number=${BUILD_NUMBER} \
  27. -Dgit.commit=${GIT_COMMIT}
  28. # ============================================
  29. # Runtime stage - ultra-minimal image
  30. # 使用Alpine基础镜像,可进一步用distroless替代
  31. # ============================================
  32. FROM openjdk:8-jre-alpine
  33. LABEL maintainer="shop-recycle"
  34. LABEL service="shop-recycle-payment-service"
  35. LABEL build.number=${BUILD_NUMBER}
  36. LABEL git.commit=${GIT_COMMIT}
  37. ENV TZ=Asia/Shanghai
  38. ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
  39. WORKDIR /app
  40. # Copy built jar from builder stage
  41. COPY --from=builder /build/shop-recycle-payment-service/target/*.jar payment-service.jar
  42. EXPOSE 8082
  43. # Health check (在Alpine中wget比curl更轻量)
  44. HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  45. CMD wget --no-verbose --tries=1 --spider http://localhost:8082/health || exit 1
  46. ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar payment-service.jar"]