2.8 KiB
2.8 KiB
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 被包含:
# 使用 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 update-deploy.sh
部署脚本会:
- 自动使用优化的打包方式
- 确保
.dockerignore被传输到服务器 - 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秒左右。