txw/devops/Dockerfile

131 lines
5.1 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ============================================================
# 碳信网 - 统一后端构建镜像
# 支持多平台构建: 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"]