88 lines
3.6 KiB
Markdown
88 lines
3.6 KiB
Markdown
|
|
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 阶段编译,更高效
|