# 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秒左右。