《Docker进阶与实战》——2.1节容器技术的前世今生-阿里云开发者社区

开发者社区> 华章出版社> 正文

《Docker进阶与实战》——2.1节容器技术的前世今生

简介:

本节书摘来自华章社区《Docker进阶与实战》一书中的第2章,第2.1节容器技术的前世今生,作者华为Docker实践小组,更多章节内容可以访问云栖社区“华章社区”公众号查看

2.1 容器技术的前世今生
2.1.1 关于容器技术
容器技术,又称为容器虚拟化,从字面上看它首先是一种虚拟化技术。在如今的技术浪潮下,虚拟化技术层出不穷,包括硬件虚拟化、半虚拟化、操作系统虚拟化等。本书不会对虚拟化技术展开介绍,只需要知道容器虚拟化是一种操作系统虚拟化,是属于轻量级的虚拟化技术即可。又因为在实现原理上,每一种虚拟化技术之间都有较大的差别,所以即使没有虚拟化的技术背景,也是可以单独来学习容器虚拟化的。
容器技术之所以受欢迎,一个重要的原因是它已经集成到了Linux内核中,已经被当作Linux内核原生提供的特性。当然在其他平台上也有相应的容器技术,但本书讨论的以及Docker涉及的都是指Linux平台的容器技术。
对于容器,目前并没有一个严格的定义,但普遍认可的说法是,它首先必须是一个相对独立的运行环境,在这一点上,有点类似虚拟机的概念,但又没有虚拟机那样彻底。另外,在一个容器环境内,应该最小化其对外界的影响,比如不能在容器中把host上的资源全部消耗掉,这就是资源控制。
一般来说,容器技术主要包括Namespace和Cgroup这两个内核特性。
Namespace又称为命名空间(也可翻译为名字空间),它主要做访问隔离。其原理是针对一类资源进行抽象,并将其封装在一起提供给一个容器使用,对于这类资源,因为每个容器都有自己的抽象,而它们彼此之间是不可见的,所以就可以做到访问隔离。
Cgroup是control group的简称,又称为控制组,它主要是做资源控制。其原理是将一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。
实际上,Namespace和Cgroup并不是强相关的两种技术,用户可以根据需要单独使用它们,比如单独使用Cgroup做资源控制,就是一种比较常见的做法。而如果把它们应用到一起,在一个Namespace中的进程恰好又在一个Cgroup中,那么这些进程就既有访问隔离,又有资源控制,符合容器的特性,这样就创建了一个容器。
对于Namespace和Cgroup,后面的章节会做详细的介绍。

2.1.2 容器技术的历史
上文提到容器技术属于一种操作系统虚拟化,事实上,其最早的原型可以简化为对目录结构的简单抽象,如图2-1所示。


5db3a2db777c36f8a6ae73b6464df5bbcc137412

图2-1所示为在普通的目录结构中创建一个完整的子目录结构。这种抽象化目录结构的出现最早源于1982年,那时通过chroot技术把用户的文件系统根目录切换到某个指定的目录下,实现了简单的文件系统视图上的抽象或虚拟化。但是这种技术只是提供了有限的文件系统隔离,并没有任何其他隔离手段,而且人们后来发现这种技术并不安全,用户可以逃离设定的根目录从而访问host上的文件。
针对上面提到的安全性问题,在2000年,内核版本2.3.41引入了pivot_root技术,它可以有效地避免chroot带来的安全性问题。今日的容器技术,比如LXC、Docker等,也都是使用了pivot_root来做根文件系统的切换。然而pivot_root也仅仅是在文件系统的隔离上做了一些增强,并没有在其他隔离性上有所提高。
同样在2000年左右,市场上出现了一些商用的容器技术,比如Linux-VServer和SWsoft(现在的Odin)开发的Virtuozzo,虽然这些技术相对当时的XEN和KVM,有明显的性能提升,但是因为各种原因,并未在当时引起市场太多的关注。

意 这里只讨论Linux系统上的容器技术,同时期还有很多有名的非Linux平台的容器技术,比如FreeBSD的jail、Solaris上的Zone等。

到了2005年,同样是Odin公司,在Virtuozzo的基础上发布了OpenVZ技术,同时开始推动OpenVZ中的核心容器技术进入Linux内核主线,而此时IBM等公司也在推动类似的技术,最后在社区的合作下,形成了目前大家看到的Cgroup和Namespace,这时,容器技术才开始逐渐进入大众的视野。
对于Namespace,其各个子系统进入内核的版本号及贡献公司如表2-1所示。


de6410db0d66a8538c1713a9ab986fa64fd9a90b


d9533ff23ee11250b057b0c4e32724f748953a5b

随着容器技术在内核主线中的不断成熟和完善,2013年诞生的Docker真正让容器技术得到了全世界技术公司和开发人员的关注,相信容器技术的未来一定会比它的前世和今生更加精彩。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接