polaris-wvp 构建流程详解
这是一个多阶段构建（Multi-stage Build）的 Dockerfile，分为两个阶段：

第一阶段：Builder（构建阶段）
基础镜像
FROM ringcentral/jdk:11 AS builder
使用 ringcentral/jdk:11 作为构建基础镜像
命名为 builder 阶段，供后续引用
端口声明
EXPOSE 18978/tcp  # WVP Web 管理端口
EXPOSE 8116/tcp   # SIP 信令端口（TCP）
EXPOSE 8116/udp   # SIP 信令端口（UDP）
EXPOSE 8080/tcp   # HTTP 端口
安装 Maven
RUN apt-get update && \
    apt-get install -y maven && \
    rm -rf /var/lib/apt/lists/*
更新软件包列表
安装 Maven 构建工具
清理缓存减小镜像体积
编译 Java 项目
COPY . /build                    # 复制整个项目到 /build
WORKDIR /build                                   # 切换工作目录
RUN ls && mvn clean package -Dmaven.test.skip=true  # Maven 打包，跳过测试
WORKDIR /build/target                            # 进入 target 目录
RUN mv wvp-pro-*.jar wvp.jar                     # 重命名 jar 包
关键点：
COPY . /build 会复制 docker-compose.yml 中 context: .. 指定的整个项目根目录
-Dmaven.test.skip=true 跳过单元测试，加快构建速度
将生成的 wvp-pro-*.jar 统一重命名为 wvp.jar


第二阶段：Runtime（运行阶段）
基础镜像
FROM ringcentral/jdk:11
重新使用干净的 JDK 11 镜像
不包含 Maven 等构建工具，镜像更小
准备运行环境
RUN mkdir -p /opt/wvp                # 创建应用目录
WORKDIR /opt/wvp                                 # 设置工作目录
COPY --from=builder /build/target /opt/wvp       # 从 builder 阶段复制编译产物
COPY ./docker/wvp/wvp /opt/wvp                   # 复制配置文件
关键点：
--from=builder 从第一阶段复制文件，实现多阶段构建
复制 ./docker/wvp/wvp 目录（包含配置文件）
启动命令
ENTRYPOINT ["java", "-Xms512m",                  # 初始堆内存 512MB
    "-Xmx1024m",                                 # 最大堆内存 1GB
    "-XX:+HeapDumpOnOutOfMemoryError",           # OOM 时生成堆转储
    "-XX:HeapDumpPath=/opt/ylcx/",               # 堆转储文件路径
    "-jar", "wvp.jar",                # 运行 jar 包
    "--spring.config.location=/opt/ylcx/wvp/application.yml"  # 指定配置文件
]
JVM 参数说明：
-Xms512m / -Xmx1024m：适合中小型部署
HeapDumpOnOutOfMemoryError：便于排查内存问题
Spring Boot 配置文件路径：/opt/ylcx/wvp/application.yml
构建上下文
在 docker-compose.yml:84-86 中：
build:
  context: ..                # 项目根目录
  dockerfile: ./docker/wvp/Dockerfile  # Dockerfile 路径
目录结构：
stream-deploy/                    ← context 根目录
├── src/                ← Java 源码
├── pom.xml                       ← Maven 配置
├── docker/
│   ├── docker-compose.yml
│   └── wvp/
│       ├── Dockerfile            ← 当前文件
│       └── wvp/                  ← 配置文件目录
│           └── application.yml
└── ...
多阶段构建的优势
镜像体积小：最终镜像不包含 Maven、源码等构建工具
安全性高：运行环境不包含编译工具链
构建效率：利用 Docker 缓存层加速重复构建
配置文件挂载
在 docker-compose.yml 中：
volumes:
  - ./wvp/wvp/:/opt/ylcx/wvp/      # 挂载配置文件
  - ./logs/wvp:/opt/wvp/logs/      # 挂载日志目录
实际配置文件路径：./docker/wvp/wvp/application.yml
注释掉的旧方案
第 71-84 行的注释代码是旧的构建方案：
从 Gitee 克隆 WVP-GB28181-pro 源码
在容器内编译
现在改为在宿主机或 builder 阶段编译，更高效