Dockerfile 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. libboost-all-dev \
  26. && apt-get clean \
  27. && rm -rf /var/lib/apt/lists/*
  28. # 使用SourceForge镜像下载Boost 1.82(更稳定的下载源)
  29. RUN cd /tmp && \
  30. 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 && \
  31. file boost_1_82_0.tar.bz2 && \
  32. tar -xjf boost_1_82_0.tar.bz2 && \
  33. cd boost_1_82_0 && \
  34. ./bootstrap.sh --with-libraries=system,json && \
  35. ./b2 -j$(nproc) variant=release link=shared threading=multi install && \
  36. ldconfig && \
  37. cd / && \
  38. rm -rf /tmp/boost_1_82_0*
  39. # 创建工作目录
  40. WORKDIR /app
  41. # 复制项目文件
  42. COPY CMakeLists.txt ./
  43. COPY include/ ./include/
  44. COPY src/ ./src/
  45. COPY main.cpp ./
  46. COPY http_server_main.cpp ./
  47. COPY config.json ./
  48. COPY video_manager.html ./
  49. # 创建构建目录并编译
  50. RUN mkdir -p build && \
  51. cd build && \
  52. cmake .. && \
  53. make -j$(nproc)
  54. # ============================================
  55. # 阶段2: 运行环境
  56. # ============================================
  57. FROM ubuntu:22.04
  58. # 设置环境变量
  59. ENV DEBIAN_FRONTEND=noninteractive
  60. ENV TZ=Asia/Shanghai
  61. # 安装运行时依赖
  62. RUN apt-get update && apt-get install -y \
  63. libavcodec-dev \
  64. libavformat-dev \
  65. libavutil-dev \
  66. libswscale-dev \
  67. libfmt-dev \
  68. libboost-system-dev \
  69. curl \
  70. && apt-get clean \
  71. && rm -rf /var/lib/apt/lists/*
  72. # 从构建阶段复制Boost库
  73. COPY --from=builder /usr/local/lib/libboost* /usr/local/lib/
  74. COPY --from=builder /usr/local/include/boost /usr/local/include/boost
  75. # 更新库链接缓存
  76. RUN ldconfig
  77. # 创建应用目录
  78. WORKDIR /app
  79. # 从构建阶段复制编译好的可执行文件
  80. COPY --from=builder /app/build/jtjai_media /app/jtjai_media
  81. COPY --from=builder /app/build/jtjai_http_server /app/jtjai_http_server
  82. # 复制配置文件和Web资源
  83. COPY --from=builder /app/config.json /app/config.json
  84. COPY --from=builder /app/video_manager.html /app/video_manager.html
  85. # 创建输出目录
  86. RUN mkdir -p /app/output
  87. # 暴露HTTP服务端口
  88. EXPOSE 8080
  89. # 设置健康检查
  90. HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  91. CMD curl -f http://localhost:8080/api || exit 1
  92. # 设置启动命令(使用绝对路径)
  93. CMD ["/app/jtjai_media", "/app/config.json"]