当前位置: 首页 > news >正文

浅析 Dockerfile 构建缓存:原理与优化方法

Docker镜像的分层结构

  1. Docker镜像是由一层一层的文件系统组成,UnionFS将这些镜像层堆叠在一起
  2. 镜像层是只读的,构建完成后就不能更改了,即使在新的镜像层修改或删除了某些文件,也不会影响之前的镜像层内容
  3. 用Dockerfile构建镜像时,每个指令都会创建一个新的镜像层,镜像层会被缓存和复用

构建缓存的基本规则

构建镜像时,Docker 按照顺序逐步执行 Dockerfile 中的指令。对于每条指令,Docker 检查它是否可以重用构建缓存中的指令。

  1. 如果引用的父镜像在构建缓存中,下一个指令将会和所有从该基础镜像派生的子镜像做比较,如果和其中一个子镜像的指令相同,那么缓存命中,否则缓存失效
  2. 在大部分情况下,通过比较Dockerfile中的指令和子镜像已经足够了,但是有些指令需要进一步的检查
  3. 对于ADD和COPY指令,文件的内容会被检查,并且会计算每一个文件的校验码。在缓存查找期间,如果文件内容或元数据发生更改,那么缓存就会失效
  4. 除了ADD和COPY指令之外,缓存检查不会查看容器中的文件来判断是否命中缓存。例如,在处理RUN apt-get -y update指令时,不会检查容器中的更新文件来确定是否命中缓存,这种情况下只会检查指定字符串是否相同

一旦缓存失效,所有后续的 Dockerfile 指令都会生成新的镜像层,不再使用缓存。

如何充分利用缓存

  1. 将多个命令合并成单个RUN指令时,同时也要考虑将变更频率不同的命令分开
  2. 指令从变更不频繁到变更频繁的顺序来写
    a. 一般源代码会经常变化,所以要把安装依赖等不经常变动的步骤写在前面,拷贝源代码等经常变动的步骤写在后面
    b.如果是Python项目的话,先拷贝requerements.txt,然后进行pip install requerements.txt,最后再进行COPY代码
  3. ARG指令的变量值变化会导致缓存失效,所以最好在使用前定义,不要过早使用

参考

https://docs.docker.com/develop/develop-images/guidelines/#leverage-build-cache

相关文章:

浅析 Dockerfile 构建缓存:原理与优化方法

Docker镜像的分层结构 Docker镜像是由一层一层的文件系统组成,UnionFS将这些镜像层堆叠在一起镜像层是只读的,构建完成后就不能更改了,即使在新的镜像层修改或删除了某些文件,也不会影响之前的镜像层内容用Dockerfile构建镜像时&…...

隐藏层节点数对分类准确率的影响

直线上有9个格子,4个石子, 数量 结构编号 6 0 1 1 1 1 0 0 0 0 0 5 2 1 1 1 0 1 0 0 0 0 5 1 1 0 1 1 1 0 0 0 0 4 3 1 1 0 0 1 1 0 0 0 4 4 1 0 1 0 1 1 0 0 0 3 5 1 0 1 0 1 0 1 0…...

【水浸传感器】软硬件一体水浸监测整套方案远程监测解决各种环境漏水问题

一、痛点分析 在工业生产中,水浸传感器可以安装在数据中心、半导体厂房、输油管道、车间仓库、变电室等易发生水浸的区域。一旦检测到漏水情况,立即发出信号反馈。然而,水浸传感器分散在各个地点,导致管理不集中、不便捷&#xf…...

知虾会员**成为知虾会员,尊享专属权益**

在当今繁忙的生活中,线上购物已经成为现代人们的主要消费方式之一。而作为线上购物平台的领军者之一,Shopee为了提供更加个性化和便利的购物体验,推出了知虾会员(Shopee会员)服务。知虾会员不仅可以享受到一系列会员专…...

好代码网同款wordpress主题,适合搭建资源分享类网站,自带五六百的精品资源数据

代码简介: 好代码资源网是个还不错的资源分享类网站,基于wordpress搭建的。它的主题看起来还是不错的。这里分享一下这个网站的主题包。说是主题包,其实就是整站打包的,集成了主题(wordpress美化主题包几个插件&#…...

Java多线程<三>常见的多线程设计模式

多线程的设计模式 两阶段线程终止 park方法 interrupted() 会让他失效。 使用volatile关键字进行改写 单例模式 双锁检测 保护性暂停 实现1: package threadBase.model;/*** author: Zekun Fu* date: 2022/5/29 19:01* Description:* 保护性暂停,* …...

JavaScript 基础二part1.运算符:赋值、一元、比较、逻辑运算符

JavaScript 基础二 1.1 赋值运算符1.2 一元运算符自增运算符的用法:例题 1.3 比较运算符不同类型间的比较严格相等对 null 和 undefined 进行比较 1.4 逻辑运算符例题 1.5 运算符优先级 1.1 赋值运算符 赋值运算符:对变量进行赋值的运算符 已经学过的赋…...

Linux 进程(八) 进程的退出码

main 函数的返回值叫做进程的退出码。当进程成功退出的时候,我们一般用0来表示。进程失败的时候一般用非零来表示。我们使用不同的数字来表示进程退出时不同的失败原因。 我们查看系统的有多少退出码以及其含义时需要用到strerror() 他的头文件和用法如下。 通过一…...

Go语言中支持的internal目录配置与组织内私网包配置详解

Go 中的内部包 这里可能会有歧义 可能是 Go 的 internal 目录中的包也可能是指内部开发的包 函数和变量的可见性 对于函数和变量而言,有如下规则:1 )小写字母开头的函数变量结构体只能在本包内访问2 )大写字母开头的函数变量结…...

如何使用Nmap加强网络安全?

Nmap是Network Mapper(网络映射器)的缩写,是一个用于端口和IP扫描以及应用程序检测的开源工具。网络和系统管理员将其用于清点网络资产、管理服务升级计划和监视服务正常运行时间。 起初,它是作为一款Linux工具而开发的&#xff…...

LeetCode 2487. 从链表中移除节点:单调栈

【LetMeFly】2487.从链表中移除节点:单调栈 力扣题目链接:https://leetcode.cn/problems/remove-nodes-from-linked-list/ 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1: 输…...

LabVIEW在高精度机器人视觉定位系统中的应用

在现代工业自动化中,精确的机器人视觉定位系统对于提高生产效率和产品质量至关重要。LabVIEW软件,以其卓越的图像处理和自动化控制功能,在这一领域发挥着重要作用。本案例将展示LabVIEW如何帮助开发和实现一个高精度的机器人视觉定位系统&…...

Arm CCA机密计算扩展

目录 Realms Realm World和Root World Arm TrustZone扩展和Arm RME之间有什么区别? 在《什么是机密计算?》中所述,Arm CCA允许您在阻止更高特权软件实体(例如Hypervisor)访问的同时部署应用程序或虚拟机(VM)。然而,通常由这些特权软件实体管理内存等资源。在这种情况…...

【Unity入门】热更新框架之xLua

目录 一、xLua概述1.1xLua简介1.2xLua安装 二、Lua文件加载2.1执行字符串2.2加载Lua文件2.3自定义loader 三、xLua文件配置3.1打标签3.2静态列表3.3动态列表 四、Lua与C#交互4.1 C#访问Lua4.1.1 获取一个全局基本数据类型4.1.2 访问一个全局的table4.1.3 访问一个全局的functio…...

大数据Doris(四十五):物化视图选择最优

文章目录 物化视图选择最优 物化视图选择最优 下面详细解释一下第一步最优物化视图是被如何选择出来的。 这里分为两个步骤: 对候选集合进行一个过滤。只要是查询的结果能从物化视图数据计算(取部分行,部分列,或部分行列的聚合)出都可以留在候选集中,过滤完成后候选集合…...

PostgreSQL10数据库源码安装及plpython2u、uuid-ossp插件安装

PostgreSQL10数据库源码安装及plpython2u、uuid-ossp插件安装 1、环境2、安装包下载3、安装3.1 、解压3.2、配置3.3、编译安装3.4 、启动与关闭 4、安装 uuid-ossp 、plpython2u插件5、参考 1、环境 centos 7 、 postgresql 10.19 2、安装包下载 postgres 源码安装包 3、安…...

如何成为ChatGPT 优质Prompt创作者

如何提问? 我想让你成为我的Prompt创作者。你的目标是帮助我创作最佳的Prompt,这个Prompt将由你ChatGPT使用。你将遵循 以下过程:1.首先,你会问我Prompt是关于什么?我会告诉你,但我们需要 通过不断的重复来…...

LeetCode第71题 - 简化路径

题目 以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表…...

VSCode上远程调试代码出现的问题

记录一下: 真的是汗流浃背了,师妹叫帮忙如何在VSCode上远程调试代码,一些自己已经经历过的问题,现在已经忘记了。又在网上一顿搜索,这次记录下吧。。。 出现以下问题: 1. 终端界面总是sh-4.4 $ &#xff…...

【langchain】入门初探实战笔记(Chain, Retrieve, Memory, Agent)

1. 简介 1.1 大语言模型技术栈 大语言模型技术栈由四个主要部分组成: 数据预处理流程(data preprocessing pipeline)嵌入端点(embeddings endpoint )向量存储(vector store)LLM 终端&#xff…...

Arm Musca-B1芯片I/O多路复用器架构与配置详解

1. Arm Musca-B1测试芯片I/O多路复用器架构解析I/O多路复用器(IOMUX)是现代嵌入式系统中实现引脚功能复用的核心模块。在Arm Musca-B1测试芯片中,这一设计允许单个物理引脚通过寄存器配置动态切换多种功能信号路径。这种架构设计显著提升了芯…...

Windows下MIT Kerberos Ticket Manager从安装到实战:一键Keytab登录与票据管理保姆教程

Windows下MIT Kerberos Ticket Manager从安装到实战:一键Keytab登录与票据管理保姆教程 在企业级IT环境中,Kerberos认证是保障系统安全的重要机制。但对于需要频繁进行认证操作的开发者和运维人员来说,反复输入密码不仅效率低下,还…...

如何用Rusted PackFile Manager彻底重构全面战争模组开发工作流?

如何用Rusted PackFile Manager彻底重构全面战争模组开发工作流? 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: h…...

ARM TLB失效指令原理与应用实践

1. ARM TLB失效指令深度解析在ARM架构中,TLB(Translation Lookaside Buffer)作为内存管理单元(MMU)的关键组件,负责缓存虚拟地址到物理地址的转换结果。当操作系统修改页表或进行上下文切换时,必…...

B站缓存视频终极转换指南:3分钟将m4s文件无损转为通用MP4格式

B站缓存视频终极转换指南:3分钟将m4s文件无损转为通用MP4格式 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的…...

深入Nachos文件系统:我是如何修复‘文件无法追加写入’这个经典Bug的

深入Nachos文件系统:我是如何修复‘文件无法追加写入’这个经典Bug的 1. 问题定位与背景分析 第一次在Nachos文件系统中尝试追加写入文件时,我遇到了一个令人困惑的现象:无论怎么操作,文件内容都无法正确扩展。这个看似简单的功能…...

插入排序:原理与优化全解析

一、核心原理把数组分为 已排序区间 和 未排序区间从头开始,依次把未排序区间的第一个元素,向前插入到已排序区间的合适位置。类比:打牌摸牌,摸到一张往手里有序牌堆里插。二、算法流程默认第 0 个元素是已排序区间;从…...

Equalizer APO完整教程:免费系统级音频均衡器从入门到精通

Equalizer APO完整教程:免费系统级音频均衡器从入门到精通 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo Equalizer APO是一款功能强大的免费开源系统级音频均衡器软件,能够为W…...

如果写好AI提示词:这份 Prompt 调试速查表帮你事半功倍

有句话说得好:"好的工程师和差的工程师的区别,不在于他们多聪明,而在于他们有没有一份好的排障清单。"这句话对 Prompt 工程也完全适用。最近三个月,我在 Claude 社区的 Discord 里帮人调试 Prompt。最常见的情况是什么…...

ClawTick CLI:为AI Agent构建可靠任务调度与监控的实践指南

1. 项目概述:为AI Agent构建可靠的任务调度基础设施 如果你正在开发或使用AI Agent,无论是基于LangChain、CrewAI还是OpenClaw,迟早会遇到一个核心问题:如何让这些智能体定时、可靠地执行任务?自己写个定时脚本&#…...