理解Docker镜像的分层结构
来源:崔格拉斯     阅读:1110
芳年居
发布于 2018-08-31 22:21
查看主页

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镜像的分层结构

理解Docker镜像的分层结构

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 Linux
相关推荐
分享|HTTP与HTTPS概念与区别
Laravel异步队列,选择Redis还是Redis?
C 语言:春节回家聚会,只有我没带对象!
Java开发需要达到什么样的水平才称得上架构师?
UNI-APP APP升级(整包升级与热升级)
首页
搜索
订单
购物车
我的