本目录包含了在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 up -d
# 查看日志
docker-compose logs -f
# 停止
docker-compose down
# 构建镜像
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
# 阶段1: 构建环境 (builder)
FROM ubuntu:22.04 AS builder
# - 安装构建工具
# - 编译C++项目
# 阶段2: 运行环境
FROM ubuntu:22.04
# - 仅安装运行时依赖
# - 复制可执行文件
# - 配置启动命令
构建阶段:
运行阶段:
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
如需更小的镜像,可以考虑:
使用Alpine Linux
FROM alpine:3.18 AS builder
# 需要安装musl-dev等依赖
最终镜像可减小到 ~100MB
使用Distroless
FROM gcr.io/distroless/cc-debian11
# 无Shell,更安全
最终镜像可减小到 ~50MB
在Dockerfile中添加非root用户:
# 创建应用用户
RUN groupadd -r appuser && useradd -r -g appuser appuser
RUN chown -R appuser:appuser /app
USER appuser
在docker-compose.yml中:
security_opt:
  - no-new-privileges:true
read_only: true
tmpfs:
  - /tmp
networks:
  rtsp_network:
    driver: bridge
    internal: true  # 内部网络,不能访问外网
构建失败: 找不到依赖
# 清除缓存重新构建
docker build --no-cache -t jtjai_media:latest .
容器启动失败
# 查看详细日志
docker logs jtjai_media
   
# 交互式运行
docker run -it --rm jtjai_media:latest bash
端口冲突
# 检查端口占用
lsof -i :8080
   
# 修改端口映射
docker run -p 9090:8080 jtjai_media:latest
权限问题
# 检查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
利用Docker层缓存加速构建:
# 先复制依赖相关文件
COPY CMakeLists.txt ./
RUN cmake ...
# 再复制源代码
COPY src/ ./src/
RUN make
RUN make -j$(nproc)
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.mdAPI_DOCUMENTATION.mdFEATURES_SUMMARY.md快速命令参考:
# 启动
./docker-start.sh
# 或
docker-compose up -d
# 停止
./docker-stop.sh
# 或
docker-compose down
# 日志
docker logs -f jtjai_media
# 重启
docker restart jtjai_media