为什么说docker是分层的?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41772936/article/details/82759923

有好多人说docker镜像是分层的,为什么呢?

下面大家看一个容器的结构

最下面是基础镜像,中间是我们在基础镜像上装的服务,最上面是容器层

其中centos镜像是只读的,可能大家有些疑惑了,平时在镜像里添加文件删除文件改的不是这个镜像吗?

在添加的时候,比如我们touch一个文件,这个时候这个文件是创建到了容器层。

在读取的时候,cat 一个文件,docker会从上面往下面找,一但找到,打开并读入内存。

在修改的时候,vim一个文件,docker会从上面往下面找,一但找到,复制到容器层,并修改。

在删除的时候,rm一个文件,docker会从上面往下面找,一但找到,在容器层记录下删除操作。

最底下的centos镜像不会被修改,因此,多个容器可以共用一个镜像,而容器层记录了每个容器的区别。

-----------------------------------

在我们用dockerfile创建镜像的时候。

每一步都有一个镜像id。

制作的过程是这样的:

运行一个临时容器,安装一下epel.rpm

然后commit提交新镜像

再使用提交的新镜像安装supervisor

再次commit提交,以此类推,最后删除临时容器,得到最后的镜像。

最后得到的镜像是所有镜像的累加

这样有什么好处呢?

可以缓存,提高效率,节省资源。

比如创建一个http镜像

生成完毕,假设http镜像ID为111

如果需要再创建一个http+php的镜像过程如下。

创建的http+php的镜像就使用了之前的镜像,在原有基础上添加一层。

不是特别详细,希望对你有所帮助。

猜你喜欢

转载自blog.csdn.net/qq_41772936/article/details/82759923