讲师中心 微信公众号
AI工具推荐 视频效率加速

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

秋涛姑娘_5171

秋涛姑娘_5171

发布时间:2026-03-20 12:36:31

|

508人浏览过

|

来源于php中文网

原创

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

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

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

ADD 远程 URL 会破坏构建缓存

Docker 在遇到 ADD <url></url> 时,无法对远程资源做内容哈希预判——它必须在每次构建时发起真实 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

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

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

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

3410

2023.10.09

更新pip版本
更新pip版本

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

7743

2024.12.20

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

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

9422

2024.12.23

python升级pip
python升级pip

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

4927

2025.07.23

curl_exec
curl_exec

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

3823

2023.06.14

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

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

895

2023.10.30

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

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

1858

2023.08.03

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

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

3004

2023.09.04

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

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

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn