Docker:容器与虚拟化的理解

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

容器和虚拟机

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

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

计算机层次与虚拟化

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

应用程序层
函数库层
    API抽象层
操作系统层
    硬件抽象层
硬件层
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

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

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

虚拟化技术

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

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

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

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

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

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

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

总结

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值