docker镜像的生成过程

镜像的生成过程

Docker镜像的构建过程,大量应用了镜像间的父子关系。即下层镜像是作为上层镜像的父镜像出现的,下层镜像是作为上层镜像的输入出现。上层镜像是在下层镜像的基础之上变化而来。

FROM centos:7

FROM指令是Dockerfile中唯一不可缺少的命令,它为最终构建出的镜像设定了一个基础镜像。该语句并不会产生新的镜像层,它是使用指定的镜像作为基础镜像层。docker build命令解析 Dockerfile的FROM指令时,可以立即获悉在哪一个镜像基础上完成下一条指令镜像层构建。

对于FROM centos:7来说,Docker Daemon首先从centos:7镜像的文件系统获取到该镜像的ID,然后再根据镜像ID提取出该镜像的json文件内容,以备下一条指令镜像层构建时使用。

LABEL auth=“Tom”

LABEL指令仅修改上一步中提取出的镜像json文件内容,在json中添加LABEL auth=“Tom”,无需更新镜像文件系统。但也会生成一个新的镜像层,只不过该镜像层中只记录了json文件内容的修改变化,没有文件系统的变化。

如果该指令就是最后一条指令,那么此时形成大的镜像和文件系统其实就是原来FROM后指定镜像的文件系统,只是json文件发生了变化。但由于json文件内容发生了变化,所以产生了新的镜像层。

COPY hello.log /val/log/

COPY指令会将宿主机中的指定文件复制到容器的指定目录,所以会改变该镜像层文件系统大小,并生成新的镜像层文件系统内容。所以json文件中的镜像ID也就发生了变化,产生了新的镜像层。

RUN yum -y install vim

RUN指令本身并不会改变镜像层文件系统大小,但由于其RUN的命令是yum install,而该命令运行的结果就是下载并安装一个工具,所以导致RUN命令最后也改变了镜像层文件系统大小,所以也就生成了新的镜像层文件系统内容。所以json文件中的镜像ID也就发生了变化,产生了新的镜像层。

CMD /bin/bash

对于CMD或ENTRYPOINT指令,其是不会改变镜像层文件系统大小的,因为其不会再docker build过程中执行。所以该条指令没有改变镜像层文件系统大小。

但是对于CMD或者ENTRYPOINT指令,由于是等容器启动之后再执行的命令,所以会将其写入到json文件中,会引起json文件的改变。所以json文件中的镜像ID也就发生了变化,产生了新的镜像层。

docker build cache机制

Docker Daemnon 通过 Dockerfile 构建镜像时,当发现即将新构建出的镜像(层)与本地

已存在的某镜像(层)重复时,默认会复用已存在镜像(层)而不是重新构建新的镜像(层),这种

机制称为 docker build cache 机制。该机制不仅加快了镜像的构建过程,同时也大量节省了

Docker 宿主机的空间。

docker build cache 并不是占用内存的 cache,而是一种对磁盘中相应镜像层的检索、复

用机制。所以,无论是关闭 Docker 引擎,还是重启 Docker 宿主机,只要该镜像(层)存在于

本地,那么就会复用。

docker build cache失效

Dockerfile 文件发生变化

当 Dockerfile 文件中某个指令内容发生变化,那么从发生变化的这个指令层开始的所有

镜像层 cache 全部失效。即从该指令行开始的镜像层将构建出新的镜像层,而不再使用 buildcache,即使后面的指令并未发生变化。因为镜像关系本质上是一种树状关系,只要其上层

节点变了,那么该发生变化节点的所有下层节点也就全部变化了。

FROM centos:7
LABEL auto="Hayaizo"
COPY hello.log /var/log/
RUN yum install -y vim
CMD ["/bin/bash"]
EXPOSE 9000

修改为

FROM centos:7
LABEL auto="Hayaizo"
COPY hello.log /usr/local/
RUN yum install -y vim
CMD ["/bin/bash"]
EXPOSE 9000

COPY这一行发生了改变,那么从COPY这一层开始的镜像cache全部失效。

ADD 或 COPY 指令内容变化

Dockerfile 文件内容没有变化,但 ADD 或 COPY 指令所复制的文件内容发生了变化,同

样会使从该指令镜像层开始的后面所有镜像层的 build cache 失效。

echo "hi Jerry" >> hello.log

又开始重新安装了。

RUN 指令外部依赖变化

与 ADD/COPY 指令相似。Dockerfile 文件内容没有变化,但 RUN 命令的外部依赖发生了

变化,例如本例中要安装的 vim 软件源发生了变更(版本变化、下载地址变化等),那么从发

生变化的这个指令层开始的所有镜像层 cache 全部失效。

指定不使用 build cache

有些时候为了确保在镜像构建过程中使用到新的数据,在镜像构建 docker build 时,通

过–no-cache 选项指定不使用 build cache。

清理 dangling build cache

dangling build cache,即悬虚 build cache,指的是无法使用的 build cache。一般为悬虚镜

像 dangling image 所产生的 build cache。通过 docker system prune 命令可以清除。

也可以使用docker system prune来清理:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/234745.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web APIs知识点讲解

学习目标: 能获取DOM元素并修改元素属性具备利用定时器间歇函数制作焦点图切换的能力 一.Web API 基本认知 1.作用和分类 作用: 就是使用 JS 去操作 html 和浏览器分类:DOM (文档对象模型)、BOM(浏览器对象模型) 2.DOM DOM(Document Ob…

吉林大学19、21级计算机学院《计算机网络》期末真题试题

一、21级(考后回忆) 一、不定项选择(一共10个选择题,一个两分,选全得满分) 不定项:可以选择1~4个 考点有: ①协议、服务 ②码分多路复用通过接受码片序列,求哪个站点发送…

vue3项目中axios的常见用法和封装拦截(详细解释)

1、axios的简单介绍 Axios是一个基于Promise的HTTP客户端库,用于浏览器和Node.js环境中发送HTTP请求。它提供了一种简单、易用且功能丰富的方式来与后端服务器进行通信。能够发送常见的HTTP请求,并获得服务端返回的数据。 此外,Axios还提供…

C++ queue

目录 一、介绍 二、queue使用 三、模拟实现 四、优先级队列 五、priority_queue使用 OJ题:215. 数组中的第K个最大元素 快速排序 优先级队列 TOPK 六、模拟实现priority_queue 1、仿函数 2、优先级队列类 3、测试函数 一、介绍 1、队列是一种容器适配器…

【手搓深度学习算法】用线性回归预测波士顿房价

线性回归 线性回归是一种监督学习方法,用于建立因变量与一个或多个自变量之间的关系。线性回归的目标是找到一条直线,使得所有数据点到这条直线的距离之和最小。 线性回归的基本形式如下: y β 0 β 1 x 1 β 2 x 2 . . . β n x n ϵ…

mysql基础-常用函数汇总

目录 1. 查询技巧 2. 时间函数 2.1 now() 2.2 current_date() 2.3 时间差timestampdiff()与datediff() 2.4 其他时间函数 3. 字符函数 3.1 截取函数 3.2 分割函数 3.3 left与right函数 3.4 其他函数 4. 数字函数 5. …

自定义HBase负载均衡器MyCustomBalancer实现步骤与代码解析

目录 1.HBase默认负载均衡策略 1.1 负载均衡总体流程 1.2 不能触发负载均衡的情况 1.3 负载均衡算法 2.自定义的 HBase 负载均衡器的步骤 3.MyCustomBalancer的代码细节 3.1 balanceCluster 方法的作用 3.2balanceCluster 对数据的影响 3.3监控HBase的性能指标 3.3.…

在国内 PMP 有多少含金量?

在我国大陆,有好多证书被商业化得太重了,甚至演变成了个人或一些公司摇钱的工具。所以有些证书受人吹捧它崛起的快,但是活不长,甚至“夭折”,比如以前微软系列的证书; 而PMP认证从国外引进大陆这么多年了&…

PMP认证考试详细备考攻略,全是干货!

要明白,虽然PMP备考考试只是一时的过程,但通过PMP获得的证书和能力是永久的。 这不仅仅是因为我拿到了PMP培训结业证书和PMP认证证书这两个证明,更重要的是在参加PMP认证考试的整个过程中,我学到了很多关于项目管理的知识&#x…

Python基础入门第九课笔记(文件和文件夹)

1,新建文本并且写内容 a open(1.text,w) a.write("""aaa bbb ccc""") a.close() 2,seek( )移动文件指针 文件对象.seek(偏移量,起始位置) # 起始位置:0开头,1当前位置,2文件结尾…

获取深层次字段报错TypeError: Cannot read properties of undefined (reading ‘title‘)

动态生成菜单时报错,不能多层获取路由meta下面的title字段 <template><p>{{ meneList }}</p><template v-for"item in meneList" :key"item.path"><el-menu-item v-if"!item.children"><template #title>{…

一键了解获取网页requests方式

目录 一、爬虫原理&#xff1a; 二、安装&#xff1a; 测试&#xff1a; 三、文件的操作 方式一 方式二: 方式三 四、认识User-Agent 4.1、为什么用User-Agent&#xff1a; 步骤&#xff1a; 五、请求方式 5.1、get 5.2、post 六、爬出有中国关键字页面案例 一、爬…

小型图书借阅管理系统

springbootmybatismysqlthymeleafjquery构建的小型图书借阅管理系统后端 1.springboot 2.mybatis数据库 1.mysql前端 1.jquery 2.jquery-validate 3.htmlcss

【性能测试入门】:压力测试概念!

压力测试可以验证软件应用程序的稳定性和可靠性。压力测试的目标是评估软件在极端负载条件下的鲁棒性和错误处理能力&#xff0c;并确保软件在紧急情况下不会崩溃。它甚至可以进行超出软件正常工作条件的测试&#xff0c;并评估软件在极端条件下的工作方式。 在软件工程中&…

Linux 上 Nginx 配置访问 web 服务器及配置 https 访问配置过程记录

目录 一、前言说明二、配置思路三、开始修改配置四、结尾 一、前言说明 最近自己搭建了个 Blog 网站&#xff0c;想把网站部署到服务器上面&#xff0c;本文记录一下搭建过程中 Nginx 配置请求转发的过程。 二、配置思路 web项目已经在服务器上面运行起来了&#xff0c;运行的端…

WPS使用技巧——默认粘贴无格式文本

从网页或者其他文档内复制的文本往往带有原本的格式&#xff0c;粘贴到自己的word文档里面&#xff0c;要么先粘贴后统一格式&#xff0c;要么右键选择“只粘贴文本”&#xff0c;非常不便。 今天分享一个可以将粘贴方式默认为“只粘贴文本”的无格式粘贴方法&#xff0c;这样…

pycharm的使用技巧

1.新建文件时,自动生成代码 settings->editor->file and code templates,选择python script ${NAME} 文件名 ${DATE} 日期 2.自动补齐自定义段落 settings->editor->live templates,在右侧点击+号,添加自定义的内容 完成之后,在下方勾选python 3.修改注释的…

(23)Linux的软硬连接

前言&#xff1a;上一章我们讲解了 inode&#xff0c;为文件系统收了尾&#xff0c;这几章我们充分地讲解完了文件系统的知识点&#xff0c;现在我们开始开始学习软硬链接了。 软硬链接 1、Linux 下的快捷方式&#xff1a;软链接 上一章我们介绍完了 inode &#xff0c;我们…

【C语言】Linux实现高并发处理的过程

一、实现高并发的几种策略 C语言本身并没有内建的多线程支持&#xff08;新版C语言支持&#xff0c;但用得不多&#xff09;&#xff0c;但是在多数操作系统中&#xff0c;可以使用库来实现多线程编程。例如&#xff0c;在POSIX兼容系统上&#xff0c;可以使用 pthreads 库来创…

FindMy技术用于键盘

键盘是我们生活中不可或缺的输入工具&#xff0c;是人与计算机之间沟通的桥梁&#xff0c;无论是编写文档、浏览网页、玩游戏、或是进行复杂的数据分析&#xff0c;键盘都在其中发挥着关键的作用。此外&#xff0c;键盘还是各种软件的快捷键操作的关键。通过熟练地运用快捷键&a…