DOCKER_FILES_README.md 6.5 KB

Docker 部署文件说明

本目录包含了在AMD64平台上使用Docker部署RTSP视频流管理系统所需的所有文件。

📁 文件列表

文件名 说明 必需
Dockerfile Docker镜像构建文件 ✅ 是
docker-compose.yml Docker Compose配置文件 推荐
.dockerignore Docker构建忽略文件 推荐
docker-start.sh 快速启动脚本 可选
docker-stop.sh 快速停止脚本 可选
DOCKER_README.md 详细使用文档 推荐阅读

🚀 快速开始

最简单的方式

# 1. 给脚本添加执行权限(仅首次)
chmod +x docker-start.sh docker-stop.sh

# 2. 启动服务
./docker-start.sh

# 3. 访问
# 浏览器打开: http://localhost:8080/manager

# 4. 停止服务
./docker-stop.sh

使用Docker Compose

# 启动
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止
docker-compose down

使用Docker命令

# 构建镜像
docker build --platform linux/amd64 -t jtjai_media:latest .

# 运行容器
docker run -d \
  --name jtjai_media \
  --platform linux/amd64 \
  -p 8080:8080 \
  -v $(pwd)/output:/app/output \
  -v $(pwd)/config.json:/app/config.json:ro \
  jtjai_media:latest

# 查看日志
docker logs -f jtjai_media

# 停止容器
docker stop jtjai_media

📋 Dockerfile 说明

多阶段构建

# 阶段1: 构建环境 (builder)
FROM ubuntu:22.04 AS builder
# - 安装构建工具
# - 编译C++项目

# 阶段2: 运行环境
FROM ubuntu:22.04
# - 仅安装运行时依赖
# - 复制可执行文件
# - 配置启动命令

优点

  • ✅ 镜像体积小(最终镜像不包含构建工具)
  • ✅ 构建速度快(利用Docker缓存)
  • ✅ 安全性好(减少攻击面)

安装的依赖

构建阶段:

  • build-essential (GCC/G++)
  • cmake
  • git
  • wget
  • pkg-config
  • FFmpeg开发库
  • Boost开发库

运行阶段:

  • FFmpeg运行库
  • Boost运行库

🔧 Docker Compose 配置

主要配置项

services:
  jtjai_media:
    # 平台指定
    platforms:
      - linux/amd64
    
    # 端口映射
    ports:
      - "8080:8080"
    
    # 数据卷挂载
    volumes:
      - ./config.json:/app/config.json:ro
      - ./output:/app/output
    
    # 资源限制
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 2G
    
    # 健康检查
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/"]
      interval: 30s

📦 镜像大小优化

当前镜像分层

构建阶段 (临时):
- Ubuntu 22.04: ~77MB
- 构建工具: ~500MB
- 源代码编译: ~100MB
总计: ~677MB (临时,不保留)

运行阶段 (最终):
- Ubuntu 22.04: ~77MB
- 运行时库: ~150MB
- 可执行文件: ~5MB
- 配置文件: <1MB
最终镜像: ~235MB

进一步优化建议

如需更小的镜像,可以考虑:

  1. 使用Alpine Linux

    FROM alpine:3.18 AS builder
    # 需要安装musl-dev等依赖
    

    最终镜像可减小到 ~100MB

  2. 使用Distroless

    FROM gcr.io/distroless/cc-debian11
    # 无Shell,更安全
    

    最终镜像可减小到 ~50MB

🔒 安全建议

1. 最小权限原则

在Dockerfile中添加非root用户:

# 创建应用用户
RUN groupadd -r appuser && useradd -r -g appuser appuser
RUN chown -R appuser:appuser /app
USER appuser

2. 只读文件系统

在docker-compose.yml中:

security_opt:
  - no-new-privileges:true
read_only: true
tmpfs:
  - /tmp

3. 网络隔离

networks:
  rtsp_network:
    driver: bridge
    internal: true  # 内部网络,不能访问外网

🐛 故障排查

常见问题

  1. 构建失败: 找不到依赖

    # 清除缓存重新构建
    docker build --no-cache -t jtjai_media:latest .
    
  2. 容器启动失败

    # 查看详细日志
    docker logs jtjai_media
       
    # 交互式运行
    docker run -it --rm jtjai_media:latest bash
    
  3. 端口冲突

    # 检查端口占用
    lsof -i :8080
       
    # 修改端口映射
    docker run -p 9090:8080 jtjai_media:latest
    
  4. 权限问题

    # 检查output目录权限
    ls -la output/
       
    # 修复权限
    chmod 777 output/
    

📊 监控和日志

查看日志

# 实时日志
docker logs -f jtjai_media

# 最近100行
docker logs --tail 100 jtjai_media

# 带时间戳
docker logs -t jtjai_media

资源监控

# 查看资源使用
docker stats jtjai_media

# 查看详细信息
docker inspect jtjai_media

🔄 更新和维护

更新镜像

# 1. 拉取最新代码
git pull

# 2. 停止旧容器
docker-compose down

# 3. 重新构建
docker-compose build --no-cache

# 4. 启动新容器
docker-compose up -d

清理旧镜像

# 删除未使用的镜像
docker image prune -a

# 删除所有停止的容器
docker container prune

# 完整清理
docker system prune -a --volumes

📈 性能优化

1. 构建缓存

利用Docker层缓存加速构建:

# 先复制依赖相关文件
COPY CMakeLists.txt ./
RUN cmake ...

# 再复制源代码
COPY src/ ./src/
RUN make

2. 并行编译

RUN make -j$(nproc)

3. 共享内存

shm_size: '2gb'

🌐 生产环境部署

推荐配置

version: '3.8'

services:
  jtjai_media:
    image: jtjai_media:latest
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - ./config.json:/app/config.json:ro
      - ./output:/app/output
      - /etc/localtime:/etc/localtime:ro
    environment:
      - TZ=Asia/Shanghai
    deploy:
      resources:
        limits:
          cpus: '4.0'
          memory: 4G
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/"]
      interval: 30s
      timeout: 10s
      retries: 3
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

📞 技术支持

  • 详细文档: DOCKER_README.md
  • API文档: API_DOCUMENTATION.md
  • 功能说明: FEATURES_SUMMARY.md

📝 版本信息

  • Dockerfile版本: 1.0
  • 平台: linux/amd64
  • 基础镜像: Ubuntu 22.04
  • 构建方式: 多阶段构建
  • 最后更新: 2025-10-11

快速命令参考:

# 启动
./docker-start.sh
# 或
docker-compose up -d

# 停止
./docker-stop.sh
# 或
docker-compose down

# 日志
docker logs -f jtjai_media

# 重启
docker restart jtjai_media