|
# 🐳 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部署指南提供了完整的容器化解决方案,适合各种部署场景和需求。 |
|
|