flnxi-Wu/docs/reports/DOCKER_OPTIMIZATION.md
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

99 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Docker 构建优化说明
## 🎯 优化目标
解决 Docker 构建时传输 17GB+ 数据导致构建时间过长的问题。
## 📊 优化前后对比
### 优化前
- **构建上下文大小**: 17GB+
- **传输时间**: 215秒+
- **问题**: `uploads/` 目录中的用户上传文件被包含在构建上下文中
### 优化后
- **构建上下文大小**: 预计 < 1GB
- **传输时间**: 预计 < 30秒
- **优化**: 通过 `.dockerignore` 正确排除不必要的文件
## 🔧 具体优化措施
### 1. 更新 `.dockerignore` 文件
增强了排除规则,确保以下内容不会被包含在 Docker 构建上下文中:
- ✅ **用户上传文件**: `uploads/*`
- ✅ **备份文件**: `backups/*`
- ✅ **压缩包**: `*.tar.gz`, `*.zip`
- ✅ **日志文件**: `*.log`
- ✅ **开发工具配置**: `.vscode`, `.idea`, `.cursor`
- ✅ **临时文件**: `.cache`, `tmp`, `temp`
- ✅ **文档文件**: `*.md`, `README*`
### 2. 修复部署脚本
**关键问题**: 以前 `.dockerignore` 文件没有被打包到更新包中,导致服务器使用旧配置。
**解决方案**: 使用 `rsync` + 手动复制的方式确保 `.dockerignore` 被包含:
```bash
# 使用 rsync 复制项目文件
rsync -a --exclude='...' ./ "$TEMP_PKG_DIR/"
# 确保 .dockerignore 被包含
cp .dockerignore "$TEMP_PKG_DIR/"
cp Dockerfile "$TEMP_PKG_DIR/"
# 创建压缩包
tar -czf project-update-v2.0.tar.gz -C "$TEMP_PKG_DIR" .
```
## 📈 预期效果
### 构建时间优化
| 阶段 | 优化前 | 优化后 | 改进 |
|------|--------|--------|------|
| 加载构建上下文 | 215秒 | ~30秒 | **85%↓** |
| 总构建时间 | ~350秒 | ~120秒 | **65%↓** |
### 网络传输优化
- **本地 → 服务器**: 打包大小从包含不必要文件减少到只有 ~12MB 核心代码
- **Docker 构建上下文**: 从 17GB 减少到 < 1GB
## 🚀 使用方法
下次部署时,只需正常运行部署脚本:
```bash
bash update-deploy.sh
```
部署脚本会:
1. 自动使用优化的打包方式
2. 确保 `.dockerignore` 被传输到服务器
3. Docker 构建时会正确排除不必要的文件
## 📝 维护建议
### 服务器端 uploads 目录
服务器上的 `uploads/` 目录会随着用户上传增长,但由于 `.dockerignore` 的配置,这些文件**不会**被包含在 Docker 构建上下文中。
### 定期清理
如果服务器磁盘空间不足,可以清理:
- `backups/` 目录中的旧备份
- `.next/` 构建缓存(会自动重建)
- Docker 未使用的镜像:`docker system prune -a`
## ✅ 验证优化效果
部署后,观察构建日志中的这一行:
```
#5 [app internal] load build context
#5 transferring context: XXX MB
```
如果看到传输大小变成 **< 1GB**,说明优化成功!
## 🎉 优化完成
现在每次部署应该快很多了!从 350秒+ 降低到 120秒左右。