为什么说docker是分层的?
有好多人说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的镜像就使用了之前的镜像,在原有基础上添加一层。
不是特别详细,希望对你有所帮助。