5.3 KiB
5.3 KiB
多服务Docker配置总结
🎯 实现目标
成功将DMS合规性测试工具配置为在单个Docker容器中运行两个服务:
- API服务器 (api_server.py) - 端口5050
- 历史查看器 (history_viewer.py) - 端口5051
🔧 技术方案
方案1:Supervisor管理(推荐)
文件: Dockerfile.service + supervisord.conf
优势:
- 进程管理更稳定
- 自动重启失败的服务
- 详细的日志管理
- 生产环境推荐
配置:
# 安装supervisor
RUN apt-get install -y supervisor
# 使用supervisor启动
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
方案2:Shell脚本管理
文件: Dockerfile.simple + start_services.sh
优势:
- 配置简单
- 容易理解和调试
- 适合开发环境
配置:
# 后台启动两个服务
python api_server.py &
python history_viewer.py &
📁 新增文件
| 文件 | 说明 | 方案 |
|---|---|---|
supervisord.conf |
Supervisor配置文件 | 方案1 |
start_services.sh |
多服务启动脚本 | 方案2 |
Dockerfile.simple |
简单版Dockerfile | 方案2 |
test_multi_service.py |
多服务测试脚本 | 通用 |
🚀 使用方法
构建和启动
# 使用自动化脚本(推荐)
./docker-build.sh
# 手动构建(Supervisor方案)
docker build -f Dockerfile.service -t dms-compliance-tool .
docker run -d --name dms-compliance-tool -p 5050:5050 -p 5051:5051 dms-compliance-tool
# 手动构建(Shell脚本方案)
docker build -f Dockerfile.simple -t dms-compliance-tool:simple .
docker run -d --name dms-compliance-tool -p 5050:5050 -p 5051:5051 dms-compliance-tool:simple
访问服务
- API服务器: http://localhost:5050
- 历史查看器: http://localhost:5051
测试服务
# 使用专用测试脚本
python test_multi_service.py
# 或使用Docker测试脚本
./test-docker.sh
📊 端口配置
| 服务 | 容器内端口 | 主机端口 | 说明 |
|---|---|---|---|
| API服务器 | 5050 | 5050 | 主要的API测试服务 |
| 历史查看器 | 5051 | 5051 | 测试历史查看和管理 |
🔍 服务监控
查看服务状态
# 查看容器状态
docker ps
# 查看所有服务日志
docker logs dms-compliance-tool
# 使用Supervisor查看服务状态(方案1)
docker exec dms-compliance-tool supervisorctl status
# 查看单个服务日志(方案1)
docker exec dms-compliance-tool tail -f /var/log/supervisor/api_server.log
docker exec dms-compliance-tool tail -f /var/log/supervisor/history_viewer.log
健康检查
# 自动健康检查
curl http://localhost:5050/
curl http://localhost:5051/
# 使用测试脚本
python test_multi_service.py
🛠️ 故障排除
常见问题
-
端口冲突
# 检查端口占用 lsof -i :5050 -i :5051 # 修改端口映射 docker run -p 8050:5050 -p 8051:5051 ... -
服务启动失败
# 查看详细日志 docker logs dms-compliance-tool # 进入容器调试 docker exec -it dms-compliance-tool bash -
服务间通信问题
# 检查容器内网络 docker exec dms-compliance-tool netstat -tlnp
调试命令
# 查看进程状态
docker exec dms-compliance-tool ps aux
# 查看端口监听
docker exec dms-compliance-tool netstat -tlnp
# 重启单个服务(Supervisor方案)
docker exec dms-compliance-tool supervisorctl restart api_server
docker exec dms-compliance-tool supervisorctl restart history_viewer
📈 性能优化
资源限制
# 设置内存和CPU限制
docker run -d \
--name dms-compliance-tool \
--memory=1g \
--cpus=1.0 \
-p 5050:5050 -p 5051:5051 \
dms-compliance-tool
日志管理
# 限制日志大小
docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
dms-compliance-tool
🔄 更新和维护
服务更新
# 停止容器
docker stop dms-compliance-tool
# 重新构建
./docker-build.sh --clean
# 或使用Docker Compose
docker-compose down
docker-compose build --no-cache
docker-compose up -d
数据备份
# 备份测试报告和数据
docker cp dms-compliance-tool:/app/test_reports ./backup/
docker cp dms-compliance-tool:/app/uploads ./backup/
✅ 验证清单
部署完成后,请验证以下项目:
- 容器正常启动:
docker ps - API服务可访问:
curl http://localhost:5050 - 历史查看器可访问:
curl http://localhost:5051 - 健康检查通过:
docker inspect dms-compliance-tool | grep Health - 日志正常:
docker logs dms-compliance-tool - 数据持久化:重启容器后数据仍存在
- 多服务测试通过:
python test_multi_service.py
🎉 优势总结
- 单容器部署:简化部署流程,减少管理复杂度
- 服务隔离:两个服务独立运行,互不影响
- 统一管理:通过一个容器管理多个相关服务
- 资源共享:共享文件系统和网络资源
- 便于维护:统一的日志、监控和更新流程
现在您可以在一个Docker容器中同时运行API服务器和历史查看器,实现完整的DMS合规性测试工具功能!