# ============================================================ # 碳信网 - 统一后端构建镜像 # 支持多平台构建: docker buildx build --platform linux/arm64,linux/amd64 # 使用方式: docker run -e SERVICE_NAME=gateway txw-all:latest # ============================================================ # Stage 1: Build # 使用多架构 Maven 镜像,自动选择对应平台版本 FROM --platform=$BUILDPLATFORM maven:3.6.3-openjdk-8 AS builder # Maven 构建参数 ARG TARGETARCH ARG BUILDARCH WORKDIR /build # ------------------------------------------- # Step 1: 复制所有 pom.xml 和 settings # ------------------------------------------- # 公共模块 COPY txw-common/pom.xml txw-common/pom.xml COPY txw-common/src txw-common/src # Gateway COPY txw-gateway/pom.xml gateway/pom.xml COPY txw-gateway/devops/settings-offline.xml gateway/settings.xml COPY txw-gateway/src gateway/src # SSO COPY txw-sso/pom.xml sso/pom.xml COPY txw-sso/devops/settings-offline.xml sso/settings.xml COPY txw-sso/txw-sso-service-api/pom.xml sso/txw-sso-service-api/pom.xml COPY txw-sso/txw-sso-service-api/src sso/txw-sso-service-api/src COPY txw-sso/txw-sso-service-biz/pom.xml sso/txw-sso-service-biz/pom.xml COPY txw-sso/txw-sso-service-biz/src sso/txw-sso-service-biz/src # MHZC COPY txw-mhzc/pom.xml mhzc/pom.xml COPY txw-mhzc/devops/settings-offline.xml mhzc/settings.xml COPY txw-mhzc/txw-mhzc-service-api/pom.xml mhzc/txw-mhzc-service-api/pom.xml COPY txw-mhzc/txw-mhzc-service-api/src mhzc/txw-mhzc-service-api/src COPY txw-mhzc/txw-mhzc-service-biz/pom.xml mhzc/txw-mhzc-service-biz/pom.xml COPY txw-mhzc/txw-mhzc-service-biz/src mhzc/txw-mhzc-service-biz/src # YYGL COPY txw-yygl/pom.xml yygl/pom.xml COPY txw-yygl/settings.xml yygl/settings.xml COPY txw-yygl/txw-yygl-service-api/pom.xml yygl/txw-yygl-service-api/pom.xml COPY txw-yygl/txw-yygl-service-api/src yygl/txw-yygl-service-api/src COPY txw-yygl/txw-yygl-service-biz/pom.xml yygl/txw-yygl-service-biz/pom.xml COPY txw-yygl/txw-yygl-service-biz/src yygl/txw-yygl-service-biz/src # ------------------------------------------- # Step 2: 复制 Maven 本地仓库(离线构建) # 注意:若本地仓库中有编译好的二进制 native 库(非 Java byte code), # 需要确保这些库是跨平台的,或在 ARM64 上重新构建 # ------------------------------------------- COPY script/.m2/repository /root/.m2/repository # ------------------------------------------- # Step 3: 按依赖顺序构建 # ------------------------------------------- # 3.1 构建公共模块 WORKDIR /build/txw-common RUN mvn clean install -DskipTests -s ../gateway/settings.xml -o || mvn clean install -DskipTests # 3.2 构建 API 模块 WORKDIR /build/mhzc/txw-mhzc-service-api RUN mvn clean install -DskipTests -s ../../gateway/settings.xml -o || mvn clean install -DskipTests WORKDIR /build/sso/txw-sso-service-api RUN mvn clean install -DskipTests -s ../../gateway/settings.xml -o || mvn clean install -DskipTests WORKDIR /build/yygl/txw-yygl-service-api RUN mvn clean install -DskipTests -s ../../gateway/settings.xml -o || mvn clean install -DskipTests # 3.3 构建 BIZ 模块 WORKDIR /build/mhzc/txw-mhzc-service-biz RUN mvn clean package -DskipTests -s ../../gateway/settings.xml -o || mvn clean package -DskipTests WORKDIR /build/sso/txw-sso-service-biz RUN mvn clean package -DskipTests -s ../../gateway/settings.xml -o || mvn clean package -DskipTests WORKDIR /build/yygl/txw-yygl-service-biz RUN mvn clean package -DskipTests -s ../../gateway/settings.xml -o || mvn clean package -DskipTests # 3.4 构建 Gateway WORKDIR /build/gateway RUN mvn clean package -DskipTests -s settings.xml -o || mvn clean package -DskipTests # Stage 2: Package # 使用多架构 JRE 镜像,指定目标平台 FROM --platform=$TARGETARCH eclipse-temurin:8-jre WORKDIR /app # 安装字体(用于验证码 Captcha) # 使用中科大镜像加速 RUN echo 'deb http://mirrors.ustc.edu.cn/ubuntu-ports/ noble main restricted universe multiverse' > /etc/apt/sources.list && \ echo 'deb http://mirrors.ustc.edu.cn/ubuntu-ports/ noble-updates main restricted universe multiverse' >> /etc/apt/sources.list && \ echo 'deb http://mirrors.ustc.edu.cn/ubuntu-ports/ noble-backports main restricted universe multiverse' >> /etc/apt/sources.list && \ apt-get update && apt-get install -y --no-install-recommends \ fontconfig \ fonts-noto-cjk \ && fc-cache -f -v \ && apt-get clean -y \ && rm -rf /var/lib/apt/lists/* COPY devops/start.sh /app/start.sh RUN chmod +x /app/start.sh # 复制所有构建产物 COPY --from=builder /build/gateway/target/springboot.jar /app/gateway.jar COPY --from=builder /build/sso/txw-sso-service-biz/target/txw-sso-service-biz.jar /app/sso.jar COPY --from=builder /build/mhzc/txw-mhzc-service-biz/target/txw-mhzc-service-biz.jar /app/mhzc.jar COPY --from=builder /build/yygl/txw-yygl-service-biz/target/txw-yygl-service-biz.jar /app/yygl.jar # 清理构建缓存 RUN rm -rf /root/.m2 /root/.mvn # 环境变量:指定启动的服务名 ENV SERVICE_NAME=gateway # 激活正式环境 profile ENV SPRING_PROFILES_ACTIVE=prod EXPOSE 9300 9301 9302 9303 20010 ENTRYPOINT ["/app/start.sh"]