本目录包含了在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.md
API_DOCUMENTATION.md
FEATURES_SUMMARY.md
快速命令参考:
# 启动
./docker-start.sh
# 或
docker-compose up -d
# 停止
./docker-stop.sh
# 或
docker-compose down
# 日志
docker logs -f jtjai_media
# 重启
docker restart jtjai_media