网站运营
位置:首页>> 网站运营>> Docker容器实战之镜像与容器的工作原理

Docker容器实战之镜像与容器的工作原理

作者:运维老兵Alex  发布时间:2023-03-26 15:34:10 

标签:Docker,镜像,容器

一. bootfs和rootfs

通常而言,Linux的操作系统由两类文件系统组成:bootfs(boot file system)和rootfs(root file system),它们分别对应着系统内核与根目录文件。bootfs层主要为系统内核文件,这层的内容是无法修改的。当我们的系统在启动时会加载bootfs,当加载完成后整个内核都会存到内存中,然后系统会将bootfs卸载掉。而rootfs层则包含了系统中常见的目录和文件,如/bin,/etc,/proc等等。

Docker容器实战之镜像与容器的工作原理

Docker的镜像技术可以使用宿主机的bootfs层,这使得镜像本身只需要封装rootfs层所需要的文件和工具即可。因此,镜像可以根据需要进行定制化封装,减少占用的存储空间,如部分极精简的镜像只有几MB大小。

在不同Linux发行版本中,它们之间的主要区别在于rootfs层,比如ubuntu使用apt管理软件,而Centos使用yum方式。而在内核层面,两者的差别并不大。因此,我们可以在一台主机上同时支持不同Linux系统的镜像而不出现报错,如同时启动Centos和Ubuntu的容器。

Docker容器实战之镜像与容器的工作原理

但需要注意的是,不管容器使用什么系统的镜像,实际的内核版本都与镜像无关,都为宿主机的内核。如ubuntu16.04 的容器跑在Centos7.x的宿主机上,虽然ubuntu的内核版本是4.x.x,但我们在容器中会看到内核为centos 7.x 的内核,即 3.x.x。如果是对内核版本的要求的程序,可能会因此受到影响。

二. 镜像结构

Docker镜像采用分层的结构,由一些松耦合的只读层堆叠而成,并对外展示为一个统一的对象。所有的镜像都开始于一个基础的镜像层,当我们进行修改或内容添加时,会在镜像层上面创建新的一层。

最底层通常为基础层镜像,然后再层层叠加上来,比如安装一个Python软件,此时会在基础层上面添加一个新的层,上面包含了我们所安装的Python程序。

Docker容器实战之镜像与容器的工作原理

镜像做为所有镜像层的组合,如果镜像中有相同路径的文件,则上层镜像会覆盖下层镜像的内容,最终展示为所有层的数据汇总。

如下图所示,由于第二层的文件2与第一层具有相同的文件路径,则镜像将以第二层的文件2内容进行展示,第一层只有文件1会被显示。

Docker容器实战之镜像与容器的工作原理

我们再来回顾一下前面镜像拉取时的输出内容,Pull complete结尾的每一行代表镜像中某个被拉取的层,每个层级通过一个唯一的ID进行标识。

$ docker pull nginx:1.20
1.20: Pulling from library/nginx
5eb5b503b376: Pull complete
cdfeb356c029: Pull complete
d86da7454448: Pull complete
7976249980ef: Pull complete
8f66aa6726b2: Pull complete
c004cabebe76: Pull complete
Digest: sha256:02923d65cde08a49380ab3f3dd2f8f90aa51fa2bd358bd85f89345848f6e6623
Status: Downloaded newer image for nginx:1.20
docker.io/library/nginx:1.20

镜像层的松耦合代表着它不属于某个镜像独有,当不同镜像包含相同的层时,系统只会存储该层的一份内容,这是Docker镜像的重要特点,这样的好处有利于减少存储空间的占用。如下所示,当我们拉取另一个版本的Nginx镜像时,其中ID号为5eb5b503b376的层已经存在,则会显示为Already exists,直接使用此镜像层。

$ docker pull nginx:1.21
1.21: Pulling from library/nginx
5eb5b503b376: Already exists
1ae07ab881bd: Pull complete
78091884b7be: Pull complete
091c283c6a66: Pull complete
55de5851019b: Pull complete
b559bad762be: Pull complete
Digest: sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Status: Downloaded newer image for nginx:1.21
docker.io/library/nginx:1.21

三. 容器层

我们前面说到镜像层是只读模板,那么当我们使用镜像生成容器时,为什么又能写入数据呢?这个问题的答案涉及到一个概念:容器层。

当容器启动时,会有一个新的可写层被加载到镜像的顶部,这一层通常被称为容器层。所有对容器的修改都会发生在容器层,只有容器层是可写入的,容器层以下的镜像层都是只读的。

Docker容器实战之镜像与容器的工作原理

当我们对容器进行操作时,底层的工作原理如下:

读取文件:当容器需要读取文件时,会先在容器层寻找,如果没有发现,则会从最上层的镜像层往下寻找,当找到文件后读取到内存使用。

增加文件:当增加文件时,文件会直接写到最上面容器层,不会影响到镜像层内容。所以,当我们将容器删除时,容器中的文件也会随着消失。

修改文件:此时,如果该文件是在容器层的,则会直接修改。否则的话,Docker会从上往下依次在各层镜像中查找此文件 ,当找到后将其复制到容器层中,并进行修改。这被称为容器的写时复制特性(Copy-on-Write),这个技术保证了我们对容器的修改不会影响到底层的镜像,也实现了一个镜像可以被多个容器共用。

删除文件:当我们需要删除文件时,Docker也是由上往下寻找该文件 ,如果在容器层的文件会被直接删除,而在镜像层的文件则会被标记,此时在容器将不会再出现此文件,但镜像中的文件并不会做更改。

四. 联合文件系统

关于镜像与容器功能的实现,依赖其使用了联合文件系统(UnionFS)技术,这是一种分层、轻量级并且高性能的文件系统。Docker 目前支持的联合文件系统包括 OverlayFSAUFSVFS Device Mapper等,而默认的存储驱动为Overlay2。

来源:https://blog.51cto.com/u_14065119/5256445

0
投稿

猜你喜欢

  • 其实SQL注入漏洞并不可怕,知道原理 + 耐心仔细,就可以彻底防范!下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通
  • 我在最小化安装CentOS中网卡启动正常,但是当我们装了桌面版的CentOS后,发现不管使用哪种启动网卡的方式都会启动失败。截图如下:后来查
  • 外部在我们着手清理内部之前,先站在外面,从大街上看一下您的站点——或者在谷歌搜索结果里看起来怎么样。只要随手打开离您最近的谷歌搜索框,使用查
  • 黑帽SEO笼统的说,所有使用作弊手段或可疑手段的,都可以称为黑帽SEO。比如说垃圾链接,隐藏网页,桥页,关键词堆砌等等。近一两年,最典型的黑
  • 素有“中国博客之父”之誉的方兴东最近放言“单纯写作的博客已经落伍”,而他也承认随着业务调整,他的博客网将重心摆在社区交友上,也就是国内外现在
  • 草根精神,一息尚存,奋斗到底!在这里首先向所有奋斗在草根前线的站长们道一声:你们辛苦了,没有你们每天的努力中国互联网不会向今天这样辉煌!网民
  • 前一段时间开发需要经常使用 pip 下载,虽然把 pip 源改成了国内源,但我对速度还是不满意,更为重要的是集成测试环境是离线的,要在集成测
  • 一.错误表现 IIS5的HTTP 500内部服务器错误是我们经常碰到的错误之一,它的主要错误表现就是ASP程序不能浏览但HTM静态网页不受影
  • 10月10日消息,淘宝内部人士向腾讯科技证实,淘宝已启用search.taobao.com域名,目前正在内测自己的独立搜索引擎。淘宝搜索内测
  • 对于网站的收录与更新,搜索引擎都有它们各自的规律。因此每次网站的更新收录,都牵动着每一个网站所有者的神经。因为更新收录直接影响着百度排名和G
  • 根据不同的划分标准,网站可分成好几种类型,如将网站按照主体性质不同可分为政府网站、企业网站、商业网站、教育科研机构网站、个人网站、其它非盈利
  • 今天我们来研究一下网站广告如何选择,,或者直接说就是那些网站适合做google的广告站长建站选择好的题材,好的内容也是相当重要的如果你已经选
  • 当年,江南春看到人们在等电梯时百无聊赖,发明了在电梯口放视频广告的主意,由此成就了如今在纳斯达克风光无限的分众传媒。现在,一个类似于分众视频
  • 图片说明:10月22日下午,土豆网总经理张晓运做客东方网嘉宾聊天室,就“中国视频网站的发展之路”等话
  • 做站的都是苦孩子,也都是好孩子。 先说下 自己的经历,99 年开始上网,01年开始做个人站,都是小站,没有赚到钱,倒是后来玉米卖了点钱,把价
  • godaddy最新25%以上优惠码,30%优惠码:gdz127dc (产品通用消费满100美元可用)godaddy最新25%以上优惠码,29
  • 当用户试图通过 HTTP 或文件传输协议 (FTP) 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS
  • 一项加强服务器安全的新技术就是“客户端操作系统虚拟化”---它的原理就是使用一个特殊的虚拟化引擎来使一个虚拟化的来宾实例运转,或者是使在一个
  • 现在,很多人都拥有自己的电脑,并且通过固定的IP连接到互联网。于是,他们开始在自己的电脑上架设服务器。在自己的电脑上架设服务器,无论你使用L
  • 开始我也不知道什么是网站地图,有人问我,把我问的一楞一楞的,主要是不理解呀。后来我在网上找,查询看看到底是什么意思?他的意思解释如下:什么是
手机版 网站运营 asp之家 www.aspxhome.com