# Docker 部署文件说明 本目录包含了在AMD64平台上使用Docker部署RTSP视频流管理系统所需的所有文件。 ## 📁 文件列表 | 文件名 | 说明 | 必需 | |--------|------|------| | `Dockerfile` | Docker镜像构建文件 | ✅ 是 | | `docker-compose.yml` | Docker Compose配置文件 | 推荐 | | `.dockerignore` | Docker构建忽略文件 | 推荐 | | `docker-start.sh` | 快速启动脚本 | 可选 | | `docker-stop.sh` | 快速停止脚本 | 可选 | | `DOCKER_README.md` | 详细使用文档 | 推荐阅读 | ## 🚀 快速开始 ### 最简单的方式 ```bash # 1. 给脚本添加执行权限(仅首次) chmod +x docker-start.sh docker-stop.sh # 2. 启动服务 ./docker-start.sh # 3. 访问 # 浏览器打开: http://localhost:8080/manager # 4. 停止服务 ./docker-stop.sh ``` ### 使用Docker Compose ```bash # 启动 docker-compose up -d # 查看日志 docker-compose logs -f # 停止 docker-compose down ``` ### 使用Docker命令 ```bash # 构建镜像 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 说明 ### 多阶段构建 ```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 配置 ### 主要配置项 ```yaml 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** ```dockerfile FROM alpine:3.18 AS builder # 需要安装musl-dev等依赖 ``` 最终镜像可减小到 ~100MB 2. **使用Distroless** ```dockerfile FROM gcr.io/distroless/cc-debian11 # 无Shell,更安全 ``` 最终镜像可减小到 ~50MB ## 🔒 安全建议 ### 1. 最小权限原则 在Dockerfile中添加非root用户: ```dockerfile # 创建应用用户 RUN groupadd -r appuser && useradd -r -g appuser appuser RUN chown -R appuser:appuser /app USER appuser ``` ### 2. 只读文件系统 在docker-compose.yml中: ```yaml security_opt: - no-new-privileges:true read_only: true tmpfs: - /tmp ``` ### 3. 网络隔离 ```yaml networks: rtsp_network: driver: bridge internal: true # 内部网络,不能访问外网 ``` ## 🐛 故障排查 ### 常见问题 1. **构建失败: 找不到依赖** ```bash # 清除缓存重新构建 docker build --no-cache -t jtjai_media:latest . ``` 2. **容器启动失败** ```bash # 查看详细日志 docker logs jtjai_media # 交互式运行 docker run -it --rm jtjai_media:latest bash ``` 3. **端口冲突** ```bash # 检查端口占用 lsof -i :8080 # 修改端口映射 docker run -p 9090:8080 jtjai_media:latest ``` 4. **权限问题** ```bash # 检查output目录权限 ls -la output/ # 修复权限 chmod 777 output/ ``` ## 📊 监控和日志 ### 查看日志 ```bash # 实时日志 docker logs -f jtjai_media # 最近100行 docker logs --tail 100 jtjai_media # 带时间戳 docker logs -t jtjai_media ``` ### 资源监控 ```bash # 查看资源使用 docker stats jtjai_media # 查看详细信息 docker inspect jtjai_media ``` ## 🔄 更新和维护 ### 更新镜像 ```bash # 1. 拉取最新代码 git pull # 2. 停止旧容器 docker-compose down # 3. 重新构建 docker-compose build --no-cache # 4. 启动新容器 docker-compose up -d ``` ### 清理旧镜像 ```bash # 删除未使用的镜像 docker image prune -a # 删除所有停止的容器 docker container prune # 完整清理 docker system prune -a --volumes ``` ## 📈 性能优化 ### 1. 构建缓存 利用Docker层缓存加速构建: ```dockerfile # 先复制依赖相关文件 COPY CMakeLists.txt ./ RUN cmake ... # 再复制源代码 COPY src/ ./src/ RUN make ``` ### 2. 并行编译 ```dockerfile RUN make -j$(nproc) ``` ### 3. 共享内存 ```yaml shm_size: '2gb' ``` ## 🌐 生产环境部署 ### 推荐配置 ```yaml 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 --- **快速命令参考**: ```bash # 启动 ./docker-start.sh # 或 docker-compose up -d # 停止 ./docker-stop.sh # 或 docker-compose down # 日志 docker logs -f jtjai_media # 重启 docker restart jtjai_media ```