--------------------------------------------------------------------------------------
版权所有:超图研究所(www.supermap.com)
Blog: http://blog.csdn.net/chinagissoft
QQ群:16403743
宗旨:专注于"GIS+"前沿技术的研究与交流,将云计算技术、大数据技术、容器技术、物联网与GIS进行深度融合,探讨"GIS+"技术和行业解决方案
转载说明:文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
--------------------------------------------------------------------------------------
如今,Docker越来越在IT界深入人心,其实我们应该感谢它的前身,dotCloud,一家专注于PaaS的云平台公司。我们可以访问它的官网去了解更多:https://www.dotcloud.com/
那么Docker是如何实现?
首先,最早的容器技术是基于Linux的LXC,随着技术的不断发展,使用libcontainer来代替LXC,由于libcontainer是使用go语言编写的,而Dockers就是基于go语言开发的,所以Docker现在与容器有天然的结合,随着Docker的不断发展,相信Google也会在go语言的推广方面更上一个台阶。
不过最为关键就是Docker采用aufs文件系统来管理镜像和容器。
AUFS
所谓AUFS(Advanced multi layer unification filesystem),也称之为高级的多层的联合文件系统,它可以实现多个不同的目录的内容合并在一起,而且实现Read-Only和Read-Write目录的共存。
例如,这是一个Docker运行实例,那么桔黄色部分就是我们所说的Root FS,红色的部分为可写,蓝色的为只读,该容器可以共享Fa和Fb,当然也可以将扩展属于自己的Fc,这种机制特别适合于共享同一个文件基础,每一个在该文件基础的运行实例还包括自己的文件信息。
Docker如何使用aufs
Docker使用aufs来实现分层的文件系统的管理,对于Docker来说有两个概念,镜像和容器,一般情况下熟悉虚拟化的朋友也应该比较好理解,镜像和虚拟机实例。一般情况下,镜像我们认为是只读的,而容器我们认为是可写的。
例如上图,该宿主OS里面包含两个容器,桔黄色容器和蓝色容器,桔黄色容器为例,该容器是从一个busybox的镜像生成的,在该镜像基础上添加了自己的内容,构建了当前桔黄色容器的状态。当然我们也可以将当前状态也生成一个镜像,就好比蓝色容器的emaces镜像和Apache镜像。
所以Image类似一个单链表系统,每一个Image包含一个指向Parent image的指针,如果没有了Parent Image的镜像其实就是Os的Kernel了。
Docker的局限性
当然,Docker技术还是一个新技术,还有很多局限性需要注意:
1、它只能给予Linux64,不支持32位,当然这个条件对于遍地64位环境来说并不是多大的局限。
2、目前Docker的宿主机OS还只能是Linux,当然也听说Windows 2016 Server也支持容器,也非常期待。
3、Docker的隔离性方面相比较KVM等虚拟化技术还有所欠缺
4、容器采用Cgroup和Resource control 对于CPU度量比较难,所以一般公共环境的度量往往采用内存指标
5、Container是随着用户进程的停止而销毁的
Docker的发展方向
关于Docker的发展方向,通过这一张图可以看到,Docker急需在网络(两个小乌龟打电话),安全(锁),以及容器引擎方面进行完善。