理解Docker镜像的分层结构

作者 : 开心源码 本文共922个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共171人阅读

Docker 最基础的镜像-scratch镜像

Scratch镜像小巧而且快速, 没有bug、安全漏洞、延缓的代码或者技术债务。由于它几乎是一个空的镜像。一般来说,你要追求极致小巧的docker镜像,那么你需要从scratch镜像一步步的创立你所需要的服务。

而我们常见的centos镜像,ubuntu镜像都是在最基础的镜像之上再做封装,将少量linux系统相关的特性服务增加到基础镜像之上生成的新镜像。

镜像的分层结构

既然镜像都是从最初的基础镜像上一步步封装而成的,那么这样镜像会不会由于屡次封装而变的很大。其实并不会,docker镜像中,有多个镜像层,这些镜像层一台物理机器上可以共使用。例如你有基于centos镜像的nodejs镜像、mysql镜像、redis镜像。 其实这些镜像都公使用了底层的centos镜像层,所以真实存储的镜像大小只有底层的centos镜像层和nodejs服务镜像层、mysql服务镜像层、redis服务镜像层。

基于节约了空间资源的思路,docker的镜像采使用分层结构,所以我们见到的docker镜像都是一层层叠加起来的镜像。

容器的 Copy-on-Write 特性

前面已经详情了docker镜像采使用分层结构,那么在实际运使用中容器是如何和镜像进行协作的呢?

我们指定启动容器是将docker镜像重新激活并持续运行,那么我们在容器中进行改动时,镜像也会随之改动吗?答案是,镜像是不可改动的,例如我们对容器中某个文件进行删除,不是删除镜像层中的文件而是在容器自己所运行的层中进行标记,告诉容器自己这个文件已经删除。修改略微复杂一点,需要从镜像层中拷贝这个文件到容器层,在容器层进行修改并标记以后这个文件从容器层里查看。

那么现在大家应该很清楚,启动容器之后,所有的操作其实都记录在该容器层上,那么将此容器保存时操作的越多,那么容器层形成的新的镜像层会越大。这也就是我们使用dockerfile生成镜像的时候,尽可能的将更多的任务在一个RUN中执行,毕竟每一个RUN都会形成一个镜像层。

容器的分层结构图

最上方就是我们前面说到的容器层是可以读写的层,

1,2,3是三个镜像层,最下面的1镜像层一般是操作系统镜像层,例如centos镜像层。

理解Docker镜像的分层结构

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 理解Docker镜像的分层结构

发表回复