ccccccc / DOCKER.md
cnmksjs's picture
Upload 49 files
24fd742 verified
# 🐳 Docker部署完整指南
本项目提供了多种Docker部署方案,适应不同的使用场景和需求。
## 📦 Dockerfile文件说明
### 主要Dockerfile文件
| 文件 | 用途 | 特点 |
|------|------|------|
| `Dockerfile` | 单容器部署 | 前端+后端在一个容器中,简化部署 |
| `Dockerfile.optimized` | 优化单容器 | 多阶段构建,镜像更小,性能更好 |
| `client/Dockerfile` | 前端容器 | React应用 + Nginx,支持多容器架构 |
| `server/Dockerfile` | 后端容器 | Node.js应用,支持多容器架构 |
### Docker Compose配置
| 文件 | 用途 | 特点 |
|------|------|------|
| `docker-compose.yml` | 生产环境 | 多容器,包含健康检查和依赖管理 |
| `docker-compose.dev.yml` | 开发环境 | 支持热重载,便于开发调试 |
| `docker-compose.single.yml` | 单容器部署 | 简化的单容器 + MongoDB |
## 🚀 部署方案选择
### 方案1: 多容器部署(推荐生产环境)
**优点:**
- 服务分离,便于扩展
- 独立更新前端或后端
- 更好的资源管理
- 符合微服务架构
**部署命令:**
```bash
# 自动部署
./deploy.sh
# 手动部署
docker-compose up --build -d
# 使用Makefile
make start
```
### 方案2: 单容器部署(推荐小型部署)
**优点:**
- 部署简单
- 资源占用少
- 管理方便
- 适合小型应用
**部署命令:**
```bash
# 使用标准版本
docker-compose -f docker-compose.single.yml up -d
# 使用优化版本
docker build -t chatapp:optimized -f Dockerfile.optimized .
docker run -d -p 80:80 --name chatapp chatapp:optimized
# 使用Makefile
make single
```
### 方案3: 开发环境
**特点:**
- 支持热重载
- 实时代码同步
- 便于调试
- 快速迭代
**部署命令:**
```bash
./start-dev.sh
# 或
make dev
```
## 🔨 构建Docker镜像
### 交互式构建
```bash
# 使用构建脚本(推荐)
./build-docker.sh
# 选择构建类型:
# 1) 多容器构建
# 2) 单容器构建
# 3) 仅构建前端
# 4) 仅构建后端
```
### 手动构建
```bash
# 构建所有镜像
make build
# 构建单个镜像
docker build -t chatapp-frontend ./client
docker build -t chatapp-backend ./server
docker build -t chatapp .
# 构建优化版本
docker build -t chatapp:optimized -f Dockerfile.optimized .
```
### 镜像比较
```bash
# 比较不同版本的镜像大小和性能
./docker-compare.sh
```
## 📊 镜像优化特性
### 多阶段构建
- 分离构建环境和运行环境
- 减少最终镜像大小
- 提高安全性
### 安全特性
- 非root用户运行
- 最小权限原则
- 安全的基础镜像
- 定期安全更新
### 性能优化
- Alpine Linux基础镜像
- 优化的nginx配置
- Gzip压缩
- 静态资源缓存
- 健康检查
## 🔧 配置说明
### 环境变量
**后端环境变量:**
```env
NODE_ENV=production
MONGODB_URI=mongodb://mongo:27017/chatapp
JWT_SECRET=your-secret-key
PORT=5000
CLIENT_URL=http://localhost:3000
```
**前端环境变量:**
```env
VITE_API_URL=http://localhost:5000
```
### 端口映射
| 服务 | 容器端口 | 主机端口 | 说明 |
|------|----------|----------|------|
| 前端 | 80 | 3000 | React应用 |
| 后端 | 5000 | 5000 | API服务 |
| MongoDB | 27017 | 27017 | 数据库 |
### 数据卷
| 卷名 | 挂载点 | 用途 |
|------|--------|------|
| `mongo_data` | `/data/db` | MongoDB数据持久化 |
| `./server` | `/app` | 开发环境代码同步 |
| `./client` | `/app` | 开发环境代码同步 |
## 🧪 测试和验证
### 功能测试
```bash
# 运行完整测试套件
./test.sh
# 使用Makefile
make test
```
### 健康检查
```bash
# 检查服务状态
make health
# 查看容器状态
docker-compose ps
# 查看健康检查日志
docker inspect <container_name> | jq '.[0].State.Health'
```
### 性能测试
```bash
# 监控资源使用
docker stats
# 查看镜像大小
docker images | grep chatapp
# 网络性能测试
curl -w "@curl-format.txt" -o /dev/null -s http://localhost:3000
```
## 🔍 故障排除
### 常见问题
**1. 容器启动失败**
```bash
# 查看日志
docker-compose logs -f
# 检查容器状态
docker-compose ps
# 进入容器调试
docker exec -it <container_name> sh
```
**2. 端口冲突**
```bash
# 检查端口占用
netstat -tulpn | grep :3000
netstat -tulpn | grep :5000
# 修改端口映射
# 编辑 docker-compose.yml 中的 ports 配置
```
**3. 镜像构建失败**
```bash
# 清理构建缓存
docker builder prune -f
# 重新构建
docker-compose build --no-cache
# 查看构建日志
docker build --progress=plain .
```
**4. 数据持久化问题**
```bash
# 检查数据卷
docker volume ls
# 备份数据
make backup
# 恢复数据
make restore FILE=backup.gz
```
## 🚀 生产环境最佳实践
### 1. 使用优化镜像
```bash
# 使用多阶段构建的优化版本
docker build -t chatapp:optimized -f Dockerfile.optimized .
```
### 2. 配置资源限制
```yaml
# 在docker-compose.yml中添加
services:
server:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
```
### 3. 设置重启策略
```yaml
services:
server:
restart: unless-stopped
```
### 4. 配置日志管理
```yaml
services:
server:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
### 5. 使用健康检查
```yaml
services:
server:
healthcheck:
test: ["CMD", "wget", "--spider", "http://localhost:5000/api/health"]
interval: 30s
timeout: 10s
retries: 3
```
## 📈 监控和维护
### 日志管理
```bash
# 查看日志
make logs
# 实时日志
docker-compose logs -f
# 特定服务日志
docker-compose logs -f server
```
### 备份策略
```bash
# 自动备份脚本
make backup
# 定时备份(crontab)
0 2 * * * /path/to/chatapp/make backup
```
### 更新部署
```bash
# 更新应用
make update
# 滚动更新
docker-compose up -d --no-deps server
```
这个Docker部署指南提供了完整的容器化解决方案,适合各种部署场景和需求。