Docker - 8. Docker镜像底层原理

news2024/9/20 22:34:29

目录

1. 镜像是什么

2. UnionFS 联合文件系统

3. Docker镜像加载原理

4. Docker 容器和镜像的底层关系

5. Docker 镜像 commit 操作案例


1. 镜像是什么

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。镜像在构建之后其内容不会被改变。


2. UnionFS 联合文件系统

定义:UnionFS 是 Docker 镜像的基础,本质是一种分层、轻量级并且高性能的文件系统。

特点:

[1] 它支持对文件系统的修改作为一次提交来一层层的叠加。

[2] 可以将不同目录挂载到同一个虚拟文件系统下。

[3] 镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。分层存储使得镜像的复用、定制变的更为容易。

[4] 比如当用户想要将 tomcat 升级到新版本时,不用重新建立新镜像,只需要添加新层即可。还比如要删除前一层文件的操作,实际不是真的删除前一层的文件,而是将当前层标记为文件已删除。


3. Docker镜像加载原理

[1] Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是 UnionFS。

[2] Docker的底层是bootfs,主要包含主要有含 bootloader 和 kernal。bootloader 主要是引导加载 kernel,Linux 刚启动时会加裁 bootfs 文件系统,在 Docker 镜像的最底层是引导文件系统bootfs。这一层与我们典型的 Linux/Unix 系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs。

[3] rootfs在bootfs之上。包含的就是典型Linux系统中的 /dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各利不同的操作系统发行版,比如Ubuntu,Centos等等。

[4] docker安装的centos仅包含几十兆是由于对于一个简易的os,底层直接用主机的kernel,自己只需要提供 rootfs 即可。因此对于不同linux的发行版,bootfs基本是一致的,只是rootfs会有差别。


4. Docker 容器和镜像的底层关系

[1] 当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作 “容器层”。

[2] 容器层之下都是镜像层,所有对容器的改动,无论是添加删除还是修改都只会发生在容器层里

[3] 只有容器层是可写的,容器层下面的镜像层都是可读的。


5. Docker 镜像 commit 操作案例

案例:如果我们要在原始镜像基础上修改镜像,修改之后如何提交?

语法:docker commit -m=“提交的描述信息” -a="作者" 容器id 要创建的目标镜像名称: [标签名]

具体实例:基于从远程仓库pull下来的ubuntu镜像,添加vim命令后,重新打一个新的镜像提交。

docker images    # 查看当前镜像,其中ubuntu镜像只有77.8M
docker run -it ubuntu /bin/bash    # 进入ubuntu镜像创建的容器
vim a.txt       # 此时容器内找不到vim命令

 

apt-get update    # 更新包管理工具 
apt-get install vim    # 安装vim

 

# 注意要先退出容器,然后执行该命令。其中 386525a77949 为容器id,非镜像id
docker commit -m="add vim" -a="wmq" 386525a77949 ubuntu_addvim:20230203 

# 运行上述语句后,查看生成镜像,可看到增加了 ubuntu_addvim镜像 
docker images

 

从上述图中可以看到原来ubuntu大小是77.8M。当我们添加了vim后的镜像是178M了。说明我们添加了vim的镜像制作成功。启动新镜像并进入容器,发现其可以支持vim命令。

 

 注:该博客中部分图文内容来自于23_镜像的分层概念的学习笔记,仅供参考。如看其他Docker内容,可看我博客Docker系列aaron_neil_Dcoker系列,持续更新中。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

漏洞深度分析|Apache iotdb-web-workbench 认证绕过漏洞(CVE-2023-24830)分析

项目介绍 IoTDB-Workbench是IoTDB的可视化管理工具,可对IoTDB的数据进行增删改查、权限控制等。 项目地址 https://github.com/apache/iotdb-web-workbench 漏洞概述 Apache iotdb-web-workbench 由于硬编码了jwt token加密密钥,导致攻击者可以伪造t…

数仓之缓慢变化维(拉链表)

文章目录缓慢变化维拉链表 -- 理论缓慢变化维解决方案:拉链表场景:拉链表缺点:拉链表查询优化:拉链表 -- 示例sql查询方式补充流水表全量表增量表缓慢变化维 什么是缓慢变化维? 缓慢变化维,简称SCD(Slowl…

科技云报道:上云尚未成功,“下云潮”已悄然来临?

科技云报道原创。 云计算一直被视为是企业数字化转型的底座,很多企业都在通过加速数字化转型应对市场环境的动荡变化,一手抓降本增效,另一手也还在继续谋求突破式创新。 然而,经历这两年的疫情,活下去成为每一个企业的…

【js逆向 | 网络爬虫】简单 js 逆向实践,获取邮箱地址

网站&#xff1a; https://australia51.com/citywide/ 在各个城市分类下&#xff0c;可以看到商家链接 而部分商家介绍中&#xff0c;含有邮箱 我们通过 f12 检查元素&#xff0c;发现邮箱字段在 html 里面。 但是抓包发现&#xff0c;该字段是 <a href"/cdn-cg…

Anaconda环境Python中xlrd库的配置方法

本文介绍在Anaconda环境下&#xff0c;安装Python读取.xls格式表格文件的库xlrd的方法。 首先需要说明的是&#xff0c;由于xlrd库在读取.xlsx格式文件时具有安全漏洞&#xff0c;因此在其2.0.0及以后的版本中&#xff0c;只能读取.xls格式的表格文件&#xff1b;如果需要读取其…

C语言中字符串库函数

目录1.求字符串长度strlen模拟实现strlen2.长度不受限制的字符串函数strcpy模拟实现strcpystrcat模拟实现strcatstrcmp模拟实现strcmp3.长度受限制的字符串函数介绍strncpy模拟实现strncpystrncat模拟实现strncatstrncmp模拟实现strncmp4.字符串查找strstr模拟实现strstrstrtok…

POE交换机全方位解读(下)

POE供电在安防系统中的应用 安防行业应用PoE组网主要有简化布线、节能灵活、安全方便等优势。众所周知&#xff0c;一般的网络摄像机除了需要通过网线来传输视频信号外&#xff0c;还必须全天候为其提供足够的电力。而在现实施工中&#xff0c;经常会出现因为无法提供稳定的电源…

[SSL]微信实机测试 request:fail -2:netLERR_FAILED

request:fail -2:netLERR_FAILED 微信小程序开发过程中&#xff0c;实机测试调用服务器链接报错。 SSL证书已安装&#xff0c;通过下面工具检查&#xff0c;中间证书安装有问题。 下面是检查证书链和补全证书链的工具网站&#xff0c;亲测有效。 w​​​​​​​​​​​​​…

[数仓]埋点数据接入

第40个视频的1&#xff1a;03&#xff1a;31一、采集flume日志服务器&#xff1a;将日志采集到本地&#xff0c;共有两个日志服务器&#xff0c;因此要安装两台flume&#xff0c;每个flume采集其所在服务器上的日志source:taildir source可以实时的读取文件中的数据&#xff0c…

详解Linux中网络文件系统

目录 前言 一、samba服务简介 1、windos如何共享文件 2、在linux中访问共享文件 二、samba基本信息 三、samba的安装与启用 1.服务端 2.客户端 3.服务启用 四、建立samba服务共享目录 五、samba用户的建立 六、 samba用户访问加目录 七、samba的访问控制 八、 sa…

Web(十一)

Request 1. request对象和response对象的原理 1. request和response对象是由服务器创建的。我们来使用它们 2. request对象是来获取请求消息&#xff0c;response对象是来设置响应消息 2. request对象继承体系结构&#xff1a; ServletRequest -- 接…

Kafka知识概况

Kafka知识概况Kafka简介Kafka 生产者Kafka BrokerKafka 消费者Kafka-Eagle 监控Kafka-Kraft 模式集成 SpringBootKafka简介 消息队列简介&#xff1a; 目 前企业中比较常见的消息队列产 品主 要有 Kafka、ActiveMQ 、RabbitMQ 、RocketMQ 等。在大数据场景主要采用 Kafka 作为…

【ElasticSearch8.X】学习笔记(一)

【ElasticSearch8.X】学习笔记一、8.x与7.x的对比二、安装elk8.x2.1、下载2.2、集群规划2.3、安装2.4、配置环境2.5、修改配置文件2.6、启动2.5、安装其他结点三、Kibana 安装3.1、下载3.2、配置环境3.2、修改配置文件3.4、启动一、8.x与7.x的对比 减少内存堆使用&#xff0c;…

JavaScript 进阶--charater2

系列文章目录 提示&#xff1a; JavaScript进阶笔记 &#xff0c;希望各位看官可以高抬小手一键三连 上一章测试题 答案在最后给出 文章目录系列文章目录前言一、深入对象1.1创建对象三种方式1. 利用对象字面量创建对象2.利用new Object 创建对象3. 利用构造函数创建对象1.2 构…

设计师百度百科词条创建怎么做?

设计分为平面设计、空间设计、工业设计、珠宝设计、游戏设计、家具设计、建筑设计、室内设计、景观设计、服装设计、网页设计、系统设计、剧场设计、动漫设计、品牌设计、造型设计、三维设计师、杂志封面设计师、包装设计师、形象设计师等领域。 设计师是一个提供创意的工作&a…

Hive(8):Hive内、外部表

关键字&#xff1a;EXTERNAL 1 什么是内部表 内部表&#xff08;Internal table&#xff09;也称为被Hive拥有和管理的托管表&#xff08;Managed table&#xff09;。 默认情况下创建的表就是内部表&#xff0c;Hive拥有该表的结构和文件。换句话说&#xff0c;Hive完全管理…

Hue(2):Hue 的安装

1 上传解压安装包 Hue 的安装支持多种方式&#xff0c;包括 rpm 包的方式进行安装、tar.gz 包的方式进行安装以及 cloudera manager 的方式来进行安装等&#xff0c;我们这里使用 tar.gz 包的方式来进行安装。 Hue 的压缩包的下载地址&#xff1a; http://archive.cloudera.…

SSH远程登录RaspberryPi命令行响应缓慢问题

SSH远程登录RaspberryPi命令行响应缓慢问题1. 问题2. 分析3. 解决3.1 去掉PAM部分鉴权模块3.2 去掉sshd的DNS设置3.3 无线WiFi信号优化方法一&#xff1a;ifconfig操作方法二&#xff1a;内核自动检测4. 结果5. 补充资料5.1 [排除wifi网卡功率自管理问题](https://raspberrypi.…

LeetCode刷题---21.合并两个有序链表(双指针)

文章目录一、编程题&#xff1a;19. 删除链表的倒数第 N 个结点&#xff08;双指针-快慢指针&#xff09;1.题目描述2.示例1&#xff1a;3.示例2&#xff1a;4.示例3&#xff1a;5.提示&#xff1a;二、解题思路1.思路2.复杂度分析&#xff1a;3.算法图解三、代码实现总结一、编…

【Linux】调试器 gdb 及 ‘\r‘ 的使用

目录 前言 gdb 断点 打断点 查看、删除断点 断点使能 调试 显示数据 其他指令 ‘\r’的使用 行缓冲区 小程序 前言 &#x1f951;在 Linux 下我们可以通过 gcc 进行编译&#xff0c;但与 vs 相比若想对代码进行调试&#xff0c;我们还需要学会使用调试器 gdb 。 &am…