司格特 发表于 2018-3-8 16:10:03

Docker:容器与虚拟化的理解

今天在微信公众号看到了一篇很好的文章【炸裂的云计算-01】虚拟化原理和分类。其中虚拟化的理
解很有价值。再次算是记录一下读后感,或者说二次整理。

容器和虚拟机

每一个学习容器技术,比如Docker的人大概在入门的第一个小时就会接触到虚拟机和容器的差别。
然后列举出容器的一系列优势:占用资源少,部署快,启动快。这里首先需要说句公道话,容器技
术(以Docker为例)在获得了这些好处的同时,也丧失一些东西,比如容器的封闭性和安全性不如
虚拟机,现在已经逐渐出现容器中可能遭到黑客入侵的讨论了。

无论容器还是虚拟机还是容器,只是在不同的层面进行了虚拟化。虚拟化是一个抽象又内涵丰富的
概念,在不同的领域或层面有着不同的含义。

计算机层次与虚拟化

要理解虚拟化的不同内涵,需要从首先回顾计算机的层次结构。几乎所有的计算机遵守着相同的层
级结构。分别是:

应用程序层
函数库层
    API抽象层
操作系统层
    硬件抽象层
硬件层

自底向上,形成依赖关系,这种分层的做法带来如下好处:
1)每一层都向上提供了接口,降低系统的复杂性和软件的可移植性。
2)每一层只需要知道下一层的抽象接口即可,不需要知道其内部运作机制
3)降低系统设计的复杂性
4)提高软件可移植性

虚拟化就是由位于下层的模块,通过向上一层的模块提供一个与他原先所期待的运行环境一致的接
口方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟环境上。

虚拟化用一个通熟易懂的词语解释,就是“欺骗”,通过模访下层原有的功能模块,来欺骗上层。可
以联想“中间人攻击”还有现实中的皮包公司来理解。

因此,就明白,我们有着四个层次,每个层与层之间都有做虚拟化的机会,也确实产生了这样的技术。

虚拟化技术

有了上面的理念,就可以重新认识我们熟知的虚拟化技术:

虚拟机:存在于硬件层和操作系统层间的虚拟化技术。

虚拟机通过“伪造”一个硬件抽象接口,将一个操作系统以及操作系统层以上的层嫁接到硬件上,实
现和真实物理机几乎一样的功能。

容器:存在于操作系统层和函数库层之间的虚拟化技术。

容器通过“伪造”操作系统的接口,将API抽象层,函数库层以上的功能置于操作系统上,以Docker为
例,就是基于Linux操作系统的Namespace和CGroup功能实现的隔离容器,模拟操作系统的功能,因
为它比虚拟机高了一层,也就需要少一层东西,所以容器占用资源少。

JVM:存在于函数库层和应用程序之间的虚拟化技术。

Java虚拟机具有跨平台特性,所谓跨平台特性实际上就是虚拟化的功劳,我们Java语言是调用操作系
统函数库的,然而不同操作系统的函数库互不相同,JVM就是建立一个虚拟化层,对下通过不同的版
本适应不同的操作系统,对上提供统一的运行环境交给程序和开发者。通过虚拟化实现了如今蔚为壮
观的Java生态圈以及建立在JVM基础上的其他语言,如Scala,Clojure,Kotlin等。

总结

由此可知,虚拟机是依赖计算机层次划分而生的,提出各个层次的虚拟化技术的人真的对计算机原理
有很深的理解。未来如果发展出更多的层次,我想也会有更多的虚拟化技术。

梦想家 发表于 2018-5-14 08:46:21

学习
页: [1]
查看完整版本: Docker:容器与虚拟化的理解