查看原文
其他

Docker容器镜像的本质是什么?

李逸皓 运维book思议 2024-04-22

先放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ ↓

只会用scp?那也太Low了

很多人安装了Ubuntu第一步就做错了

服了!新来的运维3个操作把我整蒙了

Linux系统内核编译过程详解

不会吧!Linux系统磁盘分区只会fdisk吗?



Docker镜像是一个只读的文件系统,是由一层一层的文件系统组成,每一层仅包含了前一层的差异部分,这种层级的文件系统被称为UnionFS。大多数Docker镜像都是在base镜像的基础进行构建,每进行一次新的创建就会在镜像上构建一个新的UnionFS。
这里举例查看Ubuntu:15.04镜像的层级结构,示例代码如下:
[root@docker ~]# docker pull ubuntu:15.04#从官方仓库拉取(下载)Ubuntu:15.04镜像Trying to pull repository Docker.io/library/ubuntu ...... 15.04: Pulling from Docker.io/library/ubuntu9502adfba7f1: Pull complete 4332ffb06e4b: Pull complete 2f937cc07b5f: Pull complete a3ed95caeb02: Pull complete Digest: sha256:2fb27e433b3ecccea2a14e794875b086711f5d49953ef173d8a03e8707f1510f#镜像ID号Status: Downloaded newer image for Docker.io/ubuntu:15.04
通常,对Docker的操作命令都是以“Docker”开头。pull是下载镜像的命令,在英文中是“拉”的意思,所以下载镜像又叫做拉取镜像。
上述示例中,第5行到第8行是每一层UnionFS的ID号,第9行是整个镜像的ID号,这个ID号可以用来操控镜像。
通过命令查看镜像的构建过程,示例代码如下:
[root@docker ~]# docker history d1b55fd07600IMAGE CREATED CREATED BY SIZE d1b55fd07600 3 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B 3 years ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...... 1.88 kB 3 years ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/po...... 701 B 3 years ago /bin/sh -c #(nop) ADD file:3f4708cf445dc1b...... 131 MB
 
这里使用“history”与镜像的ID号组合的命令查看镜像构建过程,所显示的信息包括镜像ID、创建时间、由什么命令创建以及镜像大小。
从以上示例中的信息可以看出,Ubuntu:15.04镜像由四层只读层(Read Layer)构建而成,每一层都是由一条命令组成的,最终得到了ID为d1b55fd07600的镜像,但在用户的视角只能看到最上层的d1b55fd07600镜像。
当用户将这个镜像放在容器中运行时,会在四层之上创建一个可读可写层(Read-Write Layer),用户对Docker的操作都通过可读可写层。如果用户修改了现有的一个已存在的文件,那该文件将会从可读可写层下的只读层复制到可读可写层,该文件的只读版本仍然存在,只是已经被可读可写层中该文件的副本所隐藏。
可读可写层又叫做容器层,只读层又叫做镜像层,容器层之下均为镜像层,层级结构如图所示。

镜像的这种分层机制最大的一个好处就是:共享资源。
例如:有很多个镜像都是基于一个基础镜像构建而来,那么在本地的仓库中就只需要保存一份基础镜像,所有需要此基础镜像的容器都可以共享使用,而且镜像的每一层都可以被共享,从而节省了磁盘空间的使用。
因为有了分层机制,本地保存的基础镜像都是只读的文件系统,不用担心对容器的操作会对镜像有什么改变。
为了将零星的数据整合起来,提出了镜像层(Image Layer)这个概念,如图所示。

图中描述了一个镜像层,通过图片能够发现一个层并不仅仅包含文件系统的改变,它还能包含其他重要的信息。
元数据(Metadata)就是关于这个层的额外信息,它能够包含Docker运行时的信息与父镜像层的信息,并且只读层与可读可写层都包含元数据。如图所示。

除此之外,每一层还有一个指向父镜像层的指针。如果没有这个指针,说明它处于最底层,是一个基础镜像,如图所示。

来不及解释了,快上车!(进群看公告)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

              ↓↓↓ 点个在看,无需赞赏!

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存