stream-deploy/reademe/polaris-wvp.md

3.6 KiB
Raw Permalink Blame History

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 阶段编译,更高效