用于统一开发和部署的轻量级 Linux 容器(2)

容器VS.其他虚拟化类型

那容器到底什么是以及它与基于管理程序的虚拟化的区别是什么?简单地说,容器在操作系统层面虚拟化,而基于管理程序的虚拟化在硬件层面。效果类似,但区别很重要,这也是我花了点时间探索它们的差异和由其产生的差异和权衡的原因。

虚拟化:

容器和虚拟机(VMs)都是虚拟化工具。在虚拟机上,一个管理程序使各个孤立的硬件可用。通常,这包括两种类型的管理程序:类型1直接运行在硬件裸金属片上,而类型2则在客户操作系统上作为软件附加层运行。开源的Xen和VMware的ESX是类型1 的例子,类型2的实例包括Oracle的开源VirtualBox和VMware服务器。虽然相比Docker容器而言,类型1是个更好的候选,但我在文章的其他部分并不区分这两种类型。

与此相反,容器构造操作系统中可用的受保护部分-它们有效地虚拟化操作系统。运行在同一个操作系统上的两个容器不知道它们在共享资源,因为彼此拥有自己的抽象网络层和进程等等。

操作系统和资源

由于基于hypervisor的虚拟化仅仅提供了对硬件的访问,因此你还需要安装操作系统。这样就会运行多个完整的操作系统,每个虚拟机上运行一个,这将快速地吃完服务器上的诸如内存(RAM)、CPU和带宽等资源。

容器运行在操作系统之上,把正在运行的操作系统当作自己的主机环境。它只运行在这样的空间上:这些空间是主机操作系统的一部分,而且各个容器使用的空间相互独立。这会带来两个非常鲜明的优点。第一个优点是更高效的使用资源。如果一个容器不执行任何操作,那么它就不会耗尽资源,而且容器可以调用自己所在的主机操作系统以实现其所需要的部分或者全部功能。第二个优点是容器成本低,因此可以快速地创建和删除容器。容器不需要对整个操作系统进行重启或者关闭。容器仅仅需要的终止运行在自身独立空间的进程。因此启动和停止容器更像是启动和退出某个应用,因此启动和停止就非常快。

图2展示了两种类型的虚拟机和容器

用于统一开发和部署的轻量级 Linux 容器

图2.虚拟机和容器

独立的性能和安全

Docker容器里所执行的进程与宿主机操作系统上运行的进程或者运行在其它Docker容器里的进程是相互独立的。不过,所有的进程都是运行在相同的内核里。Docker使用LXC来给每个容器提供独立的命名空间,内核里的这项技术已经具有5年多的历史了,已经十分成熟。另外,容器还使用了控制组,Linux内核里的这项技术比LXC的历史更长,它对资源进行审核和限制。

Docker服务进程本身还是一个潜在的攻击载体,这是因为它目前只能以root权限运行。对LXC和Docker的改进都应当允许以非root权限运行容器,而且可以用另外一个用户运行Docker服务进程。

虽然容器所使用的这种类型的隔离总的来说非常强大,然而是不是像运行在hypervisor上的虚拟机那么强壮仍具有争议性。如果内核停止,那么所有的容器就会停止运行。虚拟机具有优势的领域是它十分成熟,而且广泛的应用在生产环境中。相比之下,Docker和它的支撑技术几乎没有任何行动。特别是Docker每天都进行大量的修改变化,而且我们大家都知道变化是安全的天敌.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/17857.html