# ============================================ # Build stage - 构建网关服务 # ============================================ FROM maven:3.8-openjdk-8 AS builder ARG BUILD_NUMBER=local ARG GIT_COMMIT=unknown ARG MAVEN_OPTS=-Dmaven.wagon.http.ssl.insecure=true ENV MAVEN_OPTS="${MAVEN_OPTS}" WORKDIR /build # 复制聚合 pom 和所有源代码模块 COPY pom.xml . COPY shop-recycle-common ./shop-recycle-common COPY shop-recycle-gateway ./shop-recycle-gateway COPY shop-recycle-order-service ./shop-recycle-order-service COPY shop-recycle-payment-service ./shop-recycle-payment-service # 第一步:先安装所有模块到本地仓库 RUN mvn clean install -DskipTests -B -q # 第二步:下载 gateway 的所有依赖 RUN mvn dependency:go-offline -B -q \ -pl shop-recycle-gateway \ -am # 第三步:构建 gateway 服务 RUN mvn package -DskipTests -B -q -pl shop-recycle-gateway # ============================================ # Runtime stage # ============================================ FROM openjdk:8-jre-alpine # 在 runtime stage 中重新声明 ARG(这样才能在 LABEL 中使用) ARG BUILD_NUMBER=local ARG GIT_COMMIT=unknown LABEL maintainer="shop-recycle" LABEL service="shop-recycle-gateway" LABEL build.number="${BUILD_NUMBER}" LABEL git.commit="${GIT_COMMIT}" ENV TZ=Asia/Shanghai ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200" WORKDIR /app COPY --from=builder /build/shop-recycle-gateway/target/*.jar app.jar EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health ; exit 1 ENTRYPOINT ["sh", "-c", "exec java ${JAVA_OPTS} -jar app.jar"]