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