Dockerfile 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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 k8s.device.wenhq.top:8583/docker_r/ubuntu:22.04 AS builder
  10. # 设置环境变量避免交互式提示
  11. ENV DEBIAN_FRONTEND=noninteractive
  12. ENV TZ=Asia/Shanghai
  13. # 更换为清华大学镜像源
  14. RUN sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list && \
  15. sed -i 's@//.*security.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list && apt-get update
  16. # 安装构建依赖
  17. RUN apt-get update && apt-get install -y \
  18. build-essential \
  19. cmake \
  20. git \
  21. wget \
  22. pkg-config \
  23. libavcodec-dev \
  24. libavformat-dev \
  25. libavutil-dev \
  26. libswscale-dev \
  27. libfmt-dev \
  28. libboost-all-dev \
  29. && apt-get clean \
  30. && rm -rf /var/lib/apt/lists/*
  31. # 使用SourceForge镜像下载Boost 1.82(更稳定的下载源)
  32. RUN cd /tmp && \
  33. wget -q --show-progress http://thfile.xt.wenhq.top:8083/boost_1_82_0.tar.bz2 -O boost_1_82_0.tar.bz2 && \
  34. file boost_1_82_0.tar.bz2 && \
  35. tar -xjf boost_1_82_0.tar.bz2 && \
  36. cd boost_1_82_0 && \
  37. ./bootstrap.sh --with-libraries=system,json && \
  38. ./b2 -j$(nproc) variant=release link=shared threading=multi install && \
  39. ldconfig && \
  40. cd / && \
  41. rm -rf /tmp/boost_1_82_0*
  42. # 创建工作目录
  43. WORKDIR /app
  44. # 复制项目文件
  45. COPY CMakeLists.txt ./
  46. COPY include/ ./include/
  47. COPY src/ ./src/
  48. COPY main.cpp ./
  49. COPY http_server_main.cpp ./
  50. COPY config.json ./
  51. COPY video_manager.html ./
  52. # 创建构建目录并编译
  53. RUN mkdir -p build && \
  54. cd build && \
  55. cmake .. && \
  56. make -j$(nproc)
  57. # ============================================
  58. # 阶段2: 运行环境 - 使用国内镜像加速
  59. # ============================================
  60. FROM ubuntu:22.04
  61. # 设置环境变量
  62. ENV DEBIAN_FRONTEND=noninteractive
  63. ENV TZ=Asia/Shanghai
  64. # 更换为清华大学镜像源
  65. RUN sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list && \
  66. sed -i 's@//.*security.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list
  67. # 安装运行时依赖
  68. RUN apt-get update && apt-get install -y \
  69. libavcodec-dev \
  70. libavformat-dev \
  71. libavutil-dev \
  72. libswscale-dev \
  73. libfmt-dev \
  74. libboost-system-dev \
  75. curl \
  76. && apt-get clean \
  77. && rm -rf /var/lib/apt/lists/*
  78. # 从构建阶段复制Boost库
  79. COPY --from=builder /usr/local/lib/libboost* /usr/local/lib/
  80. COPY --from=builder /usr/local/include/boost /usr/local/include/boost
  81. # 更新库链接缓存
  82. RUN ldconfig
  83. # 创建应用目录
  84. WORKDIR /app
  85. # 从构建阶段复制编译好的可执行文件
  86. COPY --from=builder /app/build/jtjai_media /app/jtjai_media
  87. COPY --from=builder /app/build/jtjai_http_server /app/jtjai_http_server
  88. # 复制配置文件和Web资源
  89. COPY --from=builder /app/config.json /app/config.json
  90. COPY --from=builder /app/video_manager.html /app/video_manager.html
  91. # 复制RTSP调试脚本
  92. COPY rtsp-debug.sh /app/rtsp-debug.sh
  93. RUN chmod +x /app/rtsp-debug.sh
  94. # 创建输出目录
  95. RUN mkdir -p /app/output
  96. # 暴露HTTP服务端口
  97. EXPOSE 8080
  98. # 设置健康检查
  99. HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  100. CMD curl -f http://localhost:8080/api || exit 1
  101. # 设置启动命令(使用绝对路径)
  102. CMD ["/app/jtjai_media", "/app/config.json"]