引言
虚拟服务器(VPS)和容器是两种流行的虚拟化技术。它们允许在单个物理服务器上运行多个操作系统和应用程序。但是,这两种技术之间存在一些关键差异,了解这些差异对于为您的需求选择正确的解决方案至关重要。
虚拟服务器与容器
| 特征 | 虚拟服务器 | 容器 ||—|—|—|| 操作系统 | 专用操作系统 | 共享操作系统 || 资源隔离 | 物理 | 逻辑 || 性能 | 相对较高 | 稍低 || 可移植性 | 较低 | 较高 || 成本 | 相对较高 | 相对较低 |
操作系统
虚拟服务器具有自己的操作系统,与其他虚拟服务器隔离。这意味着每个虚拟服务器都可以独立运行其应用程序,而不会受到其他虚拟服务器的影响。容器共享单个操作系统,这意味着它们在逻辑上独立运行,但共享底层操作系统资源。
资源隔离
虚拟服务器使用物理资源隔离,这意味着提供最快的速度,但成本更高。NAT 提供较低的速度,但成本较低。
虚拟机,容器和Docker的区别
IBM研究部门发表了一篇关于容器和虚拟机环境性能比较的论文。
这篇论文使用了Docker和KVM作为研究对象,阐述了Docker使用NAT或AUFS时的开销,并且质疑了在虚拟机上运行容器的实践方法。
论文作者在原生、容器和虚拟化环境中运行了CPU、内存、网络和I/O的benchmark。
其中,分别使用KVM和Docker作为虚拟化和容器技术的代表。
Benchmark也包含了对不同环境下Redis和MySQL负载的采样。
通过小数据包和多客户端,Redis侧重于网络栈的性能。
而MySQL侧重于内存,网络和文件系统的性能。
结果显示,在每一项测试中,Docker的性能等同于或超出KVM的性能。
在CPU和内存性能方面,KVM和Docker都引入了明显的,但可略不计的开销。
但是,对于I/O密集型的应用,两者都需要进行调整以减少开销带来的影响。
当使用AUFS存储文件时,Docker的性能会降低。
而相比之下,使用卷(volume)能够获得更好的性能。
卷是一种专门设计的目录,存在于一个或多个容器内。
通过这种目录能够绕过联合文件系统(union file system)。
这样它就没有了存储后端可能带来的开销。
默认的AUFS后端会引起显著的I/O开销,特别是当有多层目录深度嵌套的时候。
Docker的默认网络选项,–net=bridge,由于NAT会重写数据包,也引入了性能开销。
当数据包收发率变高时,这种开销会变得很明显。
可以通过使用–net=host改善网络的性能。
这个选项告诉Docker不要为容器创建一个独立的网络栈,并允许容器拥有宿主机网络接口的完全访问权限。
但是,使用这个选项时要小心。
因为它允许容器内的进程像其他根进程一样,使用数值较小的端口;并允许容器内的进程访问本地网络服务,如D-bus。
这使得容器内的进程可以做一些预料之外的事情,如重启宿主机。
尽管自诞生以来,KVM性能有了相当大的提升,但它仍然不适用于对延时敏感或高I/O访问率的工作负载。
因为每次I/O操作,它都会增加一些开销。
这个开销对于耗时较少的I/O操作是有意义的,但对于耗时较长的I/O操作是可以忽略的。
根据这些测试结果,论文对使用虚拟机实现IaaS的方法提出了质疑: 传统观点(在某种程度上,这种观点存在于年轻的云生态圈中)认为使用虚拟机实现IaaS,使用容器实现PaaS。
我们没有找到技术方面的理由来证明必须这么做,尤其是证明容器基于IaaS能提供更好的性能或者更容易部署。
由于容器提供了控制手段,并在不使用虚拟机的情况下能达到物理机的性能,所以它能够消除IaaS和非虚拟化的服务器间的差异。
尽管在虚拟环境中运行容器是一种常见的实践方法,但是论文建议直接在物理的Linux服务器上运行它们。
否则,相比于直接运行在非虚拟化的Linux上的方法,由于虚拟机的性能开销,这种实践方法不会得到任何额外的好处。
容器和虚拟机区别
1、容器与虚拟机拥有着类似的使命:对应用程序及其关联性进行隔离,从而构建起一套能够随处运行的自容纳单元。
此外,容器与虚拟机还摆脱了对物理硬件的需求,允许我们更为高效地使用计算资源,从而提升能源效率与成本效益。
2、虚拟机会将虚拟硬件、内核(即操作系统)以及用户空间打包在新虚拟机当中,虚拟机能够利用“虚拟机管理程序”运行在物理设备之上。
虚拟机依赖于hypervisor,其通常被安装在“裸金属”系统硬件之上,这导致hypervisor在某些方面被认为是一种操作系统。
一旦 hypervisor安装完成, 就可以从系统可用计算资源当中分配虚拟机实例了,每台虚拟机都能够获得唯一的操作系统和负载(应用程序)。
简言之,虚拟机先需要虚拟一个物理环境,然后构建一个完整的操作系统,再搭建一层Runtime,然后供应用程序运行。
3、对于容器环境来说,不需要安装主机操作系统,直接将容器层(比如LXC或libcontainer)安装在主机操作系统(通常是Linux变种)之上。
在安装完容器层之后,就可以从系统可用计算资源当中分配容器实例了,并且企业应用可以被部署在容器当中。
但是,每个容器化应用都会共享相同的操作系统(单个主机操作系统)。
容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,抽象层比虚拟机更少,更加轻量化,启动速度极快。
4、相比于虚拟机,容器拥有更高的资源使用效率,因为它并不需要为每个应用分配单独的操作系统——实例规模更小、创建和迁移速度也更快。
这意味相比于虚拟机,单个操作系统能够承载更多的容器。
云提供商十分热衷于容器技术,因为在相同的硬件设备当中,可以部署数量更多的容器实例。
此外,容器易于迁移,但是只能被迁移到具有兼容操作系统内核的其他服务器当中,这样就会给迁移选择带来限制。
因为容器不像虚拟机那样同样对内核或者虚拟硬件进行打包,所以每套容器都拥有自己的隔离化用户空间,从而使得多套容器能够运行在同一主机系统之上。
我们可以看到全部操作系统层级的架构都可实现跨容器共享,惟一需要独立构建的就是二进制文件与库。
正因为如此,容器才拥有极为出色的轻量化特性。
容器云是什么技术?对比于虚拟机有什么特点?
容器云是近两年在云计算技术中新兴的一种产品形式,容器在计算形态上是归属于轻量级的虚拟化技术。
和传统虚拟化内核级的Guest OS的封装不同,容器服务是进程级的虚拟化形态封装,启动速度和部署的速度都十分迅速,能够在应用层面根据资源的需求进行快速部署与调度,生命周期变化速度快。
之所以会有容器云的出现,主要还是因为时代的发展趋势所导致。
由于在2010年,国外Cloud,Docker等容器技术刚刚创立,这无非给云计算指明了一条明确的道理,此后K8s和Docker等技术就火的一塌糊涂。
而对比于传统虚拟机,容器云有什么特点呢?一:可移植性目前容器技术主要体现在应用程序容器化(Docker)和系统容器化上。
这两种形式的容器都能让IT团队从底层架构中抽象出程序代码,进一步实现各种部署环境的可移植性。
二:轻量级容器通常部署在物理服务器及其主机操作系统上,它可以通过单个操作系统安装来运行多个工作环境,因此容器云特别“轻”,仅仅需要几秒钟就可以启动。
三:降低成本与传统虚拟机相比,CPU,内存和存储效率的提高是容器技术最大优势。
在同一基础架构上支持更多容器,那么这些资源的减少就转化成巨大的成本,同时也大大减少了管理开销。