# 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
```
