123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- # 多阶段构建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 \
- libboost-all-dev \
- && apt-get clean \
- && rm -rf /var/lib/apt/lists/*
- # 使用SourceForge镜像下载Boost 1.82(更稳定的下载源)
- RUN cd /tmp && \
- wget -q --show-progress https://sourceforge.net/projects/boost/files/boost/1.82.0/boost_1_82_0.tar.bz2/download -O boost_1_82_0.tar.bz2 && \
- file boost_1_82_0.tar.bz2 && \
- tar -xjf boost_1_82_0.tar.bz2 && \
- cd boost_1_82_0 && \
- ./bootstrap.sh --with-libraries=system,json && \
- ./b2 -j$(nproc) variant=release link=shared threading=multi install && \
- ldconfig && \
- cd / && \
- rm -rf /tmp/boost_1_82_0*
- # 创建工作目录
- WORKDIR /app
- # 复制项目文件
- COPY CMakeLists.txt ./
- COPY include/ ./include/
- COPY src/ ./src/
- COPY main.cpp ./
- COPY http_server_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 \
- libboost-system-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
- COPY --from=builder /app/build/jtjai_http_server /app/jtjai_http_server
- # 复制配置文件和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
- # 设置健康检查
- HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
- CMD curl -f http://localhost:8080/api || exit 1
- # 设置启动命令(使用绝对路径)
- CMD ["/app/jtjai_media", "/app/config.json"]
|