原理简述
主机级虚拟化与容器级虚拟化
**两都之间的不同之处: **
-
主机级虚拟化技术:
为每一个封闭的实例,提供的是一个从底层硬件开始一直到高层的基础环境。也就意味着说我们每一个对应的虚拟机实例就拥有自己可视的,而且是隔离于其它实例的基础硬件,包括CPU,内存等等,所以它在硬件完成资源划分以后,提供给了我们每一个实例一个基础环境,使得我们每一个实例都得安装操作系统,从而就拥有自己的内核空间和用户空间,所以这么一来不当紧,做为当前实例的使用者,就得安装操作系统,提供环境,安装程序并提供配置文件,最终才可用服务。
主机级虚拟化,由于做了两级内核,虚拟机自己有一级,hypervisor会有性能损耗,但是隔离性是非常好的。但过于重量级。 -
容器级虚拟化技术:
为什么出现容器技术:
如果现在我打算在一台完全隔离的环境中,尽量不影响其它应用的情况下,安装一个tomcat。做为一个程序猿来讲,发部一个新程序就要运行在tomcat上测试下。这时候我提供给用户的仅仅是一个虚拟机,即便安装好操作系统,用户还得安装tomcat等,会非常麻烦,过程就感觉很重量。因为我们额外步骤会非常的多。所以这种虚拟化方式过于重量级,尤其在某些轻量级的需求面前它就显得欲发重量。所以在这种情况下就出现了容器技术。
- 容器技术:
用户空间仅仅运行用户进程而以,就不需要在主机级虚拟化技术上,它自己管理自己的内核,把虚拟出来的内核给剥离掉。给用户一个chroot环境,在这个虚根下,能够隔离和其它用户相关的用户环境。
在内核中的一个逻辑级别能够设置为隔离开来的区域,彼此之间互相不干扰,不影响的话。那么我们就可以做出来仅在用户空间,就能实现隔离的组件来。那这个在用户空间就能实现的组件就称为“容器”。每一个空间就称为一个容器,因为每一个空间都容纳了一堆的进程和用户帐号文件等等
将内核分为多个空间,然后每个空间能够提供一个完整意义上的程序运行环境,容纳了文件,系统和进程以及彼此间职离的一些组件。我们把这些技术称之为容器。
下图很清楚的区分了vm与container之间的差别: