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