Dockerfile 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. # 多阶段构建Dockerfile for AMD64平台
  2. # RTSP视频流并发拉取系统
  3. # 构建参数定义平台架构,默认为linux/amd64
  4. ARG BUILDPLATFORM=linux/amd64
  5. ARG TARGETPLATFORM=linux/amd64
  6. # ============================================
  7. # 阶段1: 构建环境
  8. # ============================================
  9. FROM --platform=$BUILDPLATFORM ubuntu:22.04 AS builder
  10. # 设置环境变量避免交互式提示
  11. ENV DEBIAN_FRONTEND=noninteractive
  12. ENV TZ=Asia/Shanghai
  13. # 安装构建依赖
  14. RUN apt-get update && apt-get install -y \
  15. build-essential \
  16. cmake \
  17. git \
  18. wget \
  19. pkg-config \
  20. libavcodec-dev \
  21. libavformat-dev \
  22. libavutil-dev \
  23. libswscale-dev \
  24. libfmt-dev \
  25. && apt-get clean \
  26. && rm -rf /var/lib/apt/lists/*
  27. # 手动安装Boost 1.81(支持JSON组件)
  28. RUN cd /tmp && \
  29. wget https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.gz && \
  30. tar -xzf boost_1_81_0.tar.gz && \
  31. cd boost_1_81_0 && \
  32. ./bootstrap.sh --with-libraries=system,json && \
  33. ./b2 -j$(nproc) install && \
  34. cd / && \
  35. rm -rf /tmp/boost_1_81_0*
  36. # 创建工作目录
  37. WORKDIR /app
  38. # 复制项目文件
  39. COPY CMakeLists.txt ./
  40. COPY include/ ./include/
  41. COPY src/ ./src/
  42. COPY main.cpp ./
  43. COPY config.json ./
  44. COPY video_manager.html ./
  45. # 创建构建目录并编译
  46. RUN mkdir -p build && \
  47. cd build && \
  48. cmake .. && \
  49. make -j$(nproc)
  50. # ============================================
  51. # 阶段2: 运行环境
  52. # ============================================
  53. FROM ubuntu:22.04
  54. # 设置环境变量
  55. ENV DEBIAN_FRONTEND=noninteractive
  56. ENV TZ=Asia/Shanghai
  57. # 安装运行时依赖
  58. RUN apt-get update && apt-get install -y \
  59. libavcodec-dev \
  60. libavformat-dev \
  61. libavutil-dev \
  62. libswscale-dev \
  63. libfmt-dev \
  64. curl \
  65. && apt-get clean \
  66. && rm -rf /var/lib/apt/lists/*
  67. # 从构建阶段复制Boost库
  68. COPY --from=builder /usr/local/lib/libboost* /usr/local/lib/
  69. COPY --from=builder /usr/local/include/boost /usr/local/include/boost
  70. # 更新库链接缓存
  71. RUN ldconfig
  72. # 创建应用目录
  73. WORKDIR /app
  74. # 从构建阶段复制编译好的可执行文件
  75. COPY --from=builder /app/build/jtjai_media /app/jtjai_media
  76. # 复制配置文件和Web资源
  77. COPY --from=builder /app/config.json /app/config.json
  78. COPY --from=builder /app/video_manager.html /app/video_manager.html
  79. # 创建输出目录
  80. RUN mkdir -p /app/output
  81. # 暴露HTTP服务端口
  82. EXPOSE 8080
  83. # 设置启动命令
  84. CMD ["/app/jtjai_media", "/app/config.json"]