Skip to content

Optimize Dockerfile build cache: move COPY after dependency installation - #9787

Open
lqfy-jhc wants to merge 1 commit into
AstrBotDevs:masterfrom
lqfy-jhc:fix/dockerfile
Open

Optimize Dockerfile build cache: move COPY after dependency installation#9787
lqfy-jhc wants to merge 1 commit into
AstrBotDevs:masterfrom
lqfy-jhc:fix/dockerfile

Conversation

@lqfy-jhc

Copy link
Copy Markdown

优化 Dockerfile 构建顺序以利用 Docker 层缓存

原因:

  • 应用代码变更频率高于系统依赖
  • 原先 COPY 在依赖安装之前,会导致代码变更时后续所有层缓存失效
  • 调整后,系统依赖和 Node.js 安装层可被缓存复用, 仅在代码或 Python 依赖变更时重新构建后续层

Modifications / 改动点

仅修改了dockerfile文件,并未引入新内容,仅仅调整了执行顺序。

  • 调整指令顺序:
  • 将 COPY . /AstrBot/ 从第一个 RUN 之前移至其后
  • 保持 apt 依赖安装、NodeSource 配置、Node.js 安装、 Python 依赖安装等步骤不变
  • This is NOT a breaking change. / 这不是一个破坏性变更。

Screenshots or Test Results / 运行截图或测试结果

  • 构建结果不变
  • 首次构建无差异,后续构建显著减少重复下载和安装耗时

Checklist / 检查清单

  • 😊 If there are new features added in the PR, I have discussed it with the authors through issues/emails, etc.
    / 如果 PR 中有新加入的功能,已经通过 Issue / 邮件等方式和作者讨论过。

  • 👀 My changes have been well-tested, and "Verification Steps" and "Screenshots" have been provided above.
    / 我的更改经过了良好的测试,并已在上方提供了“验证步骤”和“运行截图”

  • 🤓 I have ensured that no new dependencies are introduced, OR if new dependencies are introduced, they have been added to the appropriate locations in requirements.txt and pyproject.toml.
    / 我确保没有引入新依赖库,或者引入了新依赖库的同时将其添加到 requirements.txtpyproject.toml 文件相应位置。

  • 😮 My changes do not introduce malicious code.
    / 我的更改没有引入恶意代码。

Optimize Dockerfile build order to leverage layer caching

Reorder instructions:
- Move COPY . /AstrBot/ from before the first RUN to after it
- Keep apt dependencies, NodeSource setup, Node.js installation,
  and Python dependency installation steps unchanged

Reason:
- Application code changes more frequently than system dependencies
- Previously, COPY before dependency installation caused all
  subsequent layers to invalidate on every code change
- After reordering, system dependency and Node.js layers can be
  reused from cache; only later layers rebuild on code or
  Python dependency changes

Impact:
- Build output remains unchanged
- No difference on first build; subsequent builds significantly
  reduce redundant download and installation time

优化 Dockerfile 构建顺序以利用 Docker 层缓存

调整指令顺序:
- 将 COPY . /AstrBot/ 从第一个 RUN 之前移至其后
- 保持 apt 依赖安装、NodeSource 配置、Node.js 安装、
  Python 依赖安装等步骤不变

原因:
- 应用代码变更频率高于系统依赖
- 原先 COPY 在依赖安装之前,会导致代码变更时后续所有层缓存失效
- 调整后,系统依赖和 Node.js 安装层可被缓存复用,
  仅在代码或 Python 依赖变更时重新构建后续层

影响:
- 构建结果不变
- 首次构建无差异,后续构建显著减少重复下载和安装耗时
@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Aug 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS This PR changes 0-9 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant