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: 多容器部署(推荐生产环境)

优点:

  • 服务分离,便于扩展
  • 独立更新前端或后端
  • 更好的资源管理
  • 符合微服务架构

部署命令:

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