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