码迷,mamicode.com
首页 > 其他好文 > 详细

Docker镜像内有啥,存哪?

时间:2015-08-17 06:33:40      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:docker

据说重要的事情要说三遍,那我再表述一下个人观点:Docker镜像是Docker的灵魂所在。

前两讲关于Docker镜像的描述,已经从宏观的角度涉及一二。一旦掌握Docker对于镜像的层级管理方式,以及Docker镜像大小的真实情况之后,再来了解Docker镜像包含的内容以及存储,就显得简单很多。

Docker镜像内容

对于Docker镜像的认识总会有第一次,自那时开始,当然也少不了成长,笔者本人的认识过程不妨和大家一起分享:

1.初次接触Docker:相信很多爱好者都会和我一样,有这样一个认识:Docker镜像代表一个容器的文件系统内容;

2.初步接触联合文件系统:联合文件系统的概念,让我意识到镜像层级管理的技术,每一层镜像都是容器文件系统内容的一部分。

3.研究镜像与容器的关系:容器是一个动态的环境,每一层镜像中的文件属于静态内容,然而Dockerfile中的ENV、VOLUME、CMD等内容最终都需要落实到容器的运行环境中,而这些内容均不可能直接坐落到每一层镜像所包含的文件系统内容中,那这部分内容Docker该如何管理?

另外,在上述第三个步骤中,还有一种情况,相信大家并不陌生:很多个镜像层大小为0,镜像层内部不存在任何文件内容。这又是怎么一回事?

大家可以回忆一下《一图看尽Docker容器文件系统内容》中,关于空镜像的生成部分,其中提到“更新镜像的 json文件”。其实,前文埋下的伏笔,即暗示了真相:Docker镜像内容由镜像层文件内容镜像json文件组成,不论静态内容还是动态信息,Docker均为将其在json文件中更新。

Docker每一层镜像的json文件,都扮演着一个非常重要的角色,其主要的作用如下:

1.记录Docker镜像中与容器动态信息相关的内容

2.记录父子Docker镜像之间真实的差异关系

3.弥补Docker镜像内容的完整性与动态内容的缺失

Docker镜像的json文件可以认为是镜像的元数据信息,其重要性不言而喻,本系列将在下一篇文章重点分析Docker镜像json文件。敬请期待。

Docker镜像存储位置

Docker镜像内容的理论分析,看着多少有些云里雾里,不论Docker镜像层的文件,还是json文件,读来都稍显乏味。倘若可以一窥Docker中的真实环境,相信对于镜像技术的理解定会有不少的帮助。

我们直奔主题,从Docker镜像的存储入手,看看这些镜像层文件内容镜像json文件分别存储于何处。(以下展示的实验环境:宿主机操作系统为ubuntu:14.04,Docker版本为1.7.1,graphdriver类型为aufs,仅包含ubuntu:14.04一个镜像)。

查看镜像层组成

我们可以通过命令docker history ubuntu:14.04查看ubuntu:14.04,结果如下:
技术分享

图中显示ubuntu:14.04镜像共有4个镜像层。

镜像层文件内容存储

Docker镜像层的内容一般在Docker根目录的aufs路径下,为/var/lib/docker/aufs/diff/,具体情况如下:
技术分享

图中显示了镜像ubuntu:14.04的4个镜像层内容,以及每个镜像层内的一级目录情况。需要额外注意的是:镜像层d2a0ecffe6fa中没有任何内容。

镜像json文件存储

对于每一个镜像层,Docker都会保存一份相应的json文件,json文件的存储路径为/var/lib/docker/graph,ubuntu:14.04所有镜像层的json文件存储路径展示如下:
技术分享

除了json文件,大家还看到每一个镜像层还包含一个layersize文件,该文件主要记录镜像层内部文件内容的总大小。既然谈到了镜像json文件,为了给下文铺垫,以下贴出ubuntu:14.04中空镜像层d2a0ecffe6fa的json文件:
技术分享

由于该镜像层的对应的Dockerfile指令为CMD,所以镜像层的内容为空,而改镜像层的json文件会更新Cmd域,获取新的Cmd值,以便后续通过该镜像运行容器时,使用更新后的Cmd。

总结

联合文件系统的使用,是Docker镜像技术的精髓,然而除此之外,对于镜像的元数据管理(即镜像json文件)打通了通过Docker镜像直接运行Docker容器的捷径。

技术分享

欢迎关注[Docker源码分析]微信公众号,更多精彩即将呈现。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Docker镜像内有啥,存哪?

标签:docker

原文地址:http://blog.csdn.net/shlazww/article/details/47692745

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!