Docker 镜像是什么
• Docker image 本质上是一个 read-only 只读文件,可以理解为一个打包器,这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。
• 我们可以把 Docker image 理解成一个模板,可以通过这个模板实例化出来很多容器,只有实际实例化时候,才具有一些运行态的概念。
• image 里面是一层层文件系统 UnionFS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。
每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的。
构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
镜像生活案例
镜像相当于我们 java 或者 C++ 中的类,相当于一个模板,可以很方便的构建出来不同的对象。

镜像分层生活案例
我们以日常的地板为例,开发商的房子提供给用户的时候一般是做好了地暖,而这些地暖其实是一层一层添加的,最底层的钢筋水泥层,然后添加保温层,采暖管,再铺设水泥层,到最后交付的时候家家户户都是水泥面,这一层一般是不可修改的,最上层用户一般会再铺设商木地板或者地板砖每家每户的选择不一样,相当于我们镜像的容器层。


为什么需要镜像
在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和修改等操作,非常费劲。
Docker 镜像它是如何解决 PaaS 时代所面临的云端和本地一致性问题?很简单,Docker 镜像它就像一个压缩包文件,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构以及程序需要的其他依赖文件,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样。这样 docker 就屏蔽了环境的差异,用户运行程序不需要针对配置进行修改。
此外 docker 最大的贡献就是定义了容器镜像的分层的存储格式,docker 镜像技术的基础是联合文件系统 (UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。比如不同镜像的操作系统这一层是一样的,那么 docker 存储一份,其他镜像操作系统这一层存储的只是引用。





































