gongxiangp2/DOCKER_OPTIMIZATION.md
2025-10-26 09:11:04 +08:00

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

部署脚本会:

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