# 多阶段构建Dockerfile for AMD64平台 # RTSP视频流并发拉取系统 # 构建参数定义平台架构,默认为linux/amd64 ARG BUILDPLATFORM=linux/amd64 ARG TARGETPLATFORM=linux/amd64 # ============================================ # 阶段1: 构建环境 # ============================================ FROM --platform=$BUILDPLATFORM ubuntu:22.04 AS builder # 设置环境变量避免交互式提示 ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Asia/Shanghai # 安装构建依赖 RUN apt-get update && apt-get install -y \ build-essential \ cmake \ git \ wget \ pkg-config \ libavcodec-dev \ libavformat-dev \ libavutil-dev \ libswscale-dev \ libfmt-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 手动安装Boost 1.81(支持JSON组件) RUN cd /tmp && \ wget https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.gz && \ tar -xzf boost_1_81_0.tar.gz && \ cd boost_1_81_0 && \ ./bootstrap.sh --with-libraries=system,json && \ ./b2 -j$(nproc) install && \ cd / && \ rm -rf /tmp/boost_1_81_0* # 创建工作目录 WORKDIR /app # 复制项目文件 COPY CMakeLists.txt ./ COPY include/ ./include/ COPY src/ ./src/ COPY main.cpp ./ COPY config.json ./ COPY video_manager.html ./ # 创建构建目录并编译 RUN mkdir -p build && \ cd build && \ cmake .. && \ make -j$(nproc) # ============================================ # 阶段2: 运行环境 # ============================================ FROM ubuntu:22.04 # 设置环境变量 ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Asia/Shanghai # 安装运行时依赖 RUN apt-get update && apt-get install -y \ libavcodec-dev \ libavformat-dev \ libavutil-dev \ libswscale-dev \ libfmt-dev \ curl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 从构建阶段复制Boost库 COPY --from=builder /usr/local/lib/libboost* /usr/local/lib/ COPY --from=builder /usr/local/include/boost /usr/local/include/boost # 更新库链接缓存 RUN ldconfig # 创建应用目录 WORKDIR /app # 从构建阶段复制编译好的可执行文件 COPY --from=builder /app/build/jtjai_media /app/jtjai_media # 复制配置文件和Web资源 COPY --from=builder /app/config.json /app/config.json COPY --from=builder /app/video_manager.html /app/video_manager.html # 创建输出目录 RUN mkdir -p /app/output # 暴露HTTP服务端口 EXPOSE 8080 # 设置启动命令 CMD ["/app/jtjai_media", "/app/config.json"]