Dockerfile利用ADD指令下载大文件时的性能瓶颈

秋涛姑娘_5171

秋涛姑娘_5171

2026-03-20

508人浏览

原创

ADD 远程 URL 会破坏 Docker 构建缓存,因每次构建都需重下载且无法预判内容哈希,导致性能下降和镜像不一致;推荐用多阶段构建配合 curl、显式缓存和校验替代。

dockerfile利用add指令下载大文件时的性能瓶颈

Dockerfile 中使用 ADD 指令直接从远程 URL 下载大文件(如 ADD https://example.com/large.tar.gz /app/)会导致显著的构建性能下降,根本原因在于 Docker 的分层缓存机制与网络操作不可分割性之间的冲突。

ADD 远程 URL 会破坏构建缓存

Docker 在遇到 ADD 时,无法对远程资源做内容哈希预判——它必须在每次构建时发起真实 HTTP 请求,下载并校验文件后,才决定是否复用后续层。即使远端文件未变,只要 URL 字符串不变,Docker 仍需重下载;若远端文件已更新,还会导致意外的镜像不一致。

  • 每次构建都触发完整下载,无法跳过
  • 网络波动或 CDN 缓存失效会延长构建时间,甚至失败
  • 无法利用本地构建缓存加速 CI/CD 流水线

推荐替代方案:分阶段 + curl/wget + 显式缓存控制

将下载与解压拆到多阶段构建中,并借助 RUN --mount=type=cache 或本地临时文件缓存,可大幅提升复用率和稳定性。

  • 第一阶段用 curl -fSLO 下载,配合 --retry 和 --fail 提高健壮性
  • 使用 RUN --mount=type=cache,target=/root/.cache/curl 复用已有下载(需 Docker 23.0+)
  • 通过 sha256sum 校验文件完整性,避免因网络截断导致构建成功但运行失败
  • 大文件解压建议在独立 RUN 层完成,防止 tar 包残留影响缓存粒度

避免在生产 Dockerfile 中直接 ADD 远程资源

该写法虽简洁,但违背了“可重现构建”原则。CI 环境无代理、DNS 变更、证书更新等都可能让构建突然中断。更可靠的做法是:

  • 将大文件预置到私有镜像仓库或内网 HTTP 服务,配合固定版本路径(如 /v1.2.3/app-bundle.tgz)
  • 在构建前用脚本下载并校验,再通过 docker build -f Dockerfile --build-arg BUILD_CONTEXT=./downloads . 注入本地文件
  • 对开源项目,优先使用包管理器(apt install、apk add、pip install --no-cache-dir)替代手动下载

本质不是 ADD 指令慢,而是它把网络不确定性带进了本应确定的构建过程。控制输入来源、显式管理缓存、分离下载与安装,才能真正释放 Docker 构建效率。

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

2023.10.09

3410

5

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

2024.12.20

7763

6

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

2024.12.23

9422

11

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

2025.07.23

4927

16

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

2023.06.14

3823

6

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

2023.10.30

895

4

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1858

5

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

3004

5

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

6284

49

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习