虚拟化 VS 容器化

本文讲的是虚拟化 VS 容器化,【编者的话】以 Docker 为代表的容器技术一度被认为是虚拟化技术的替代品,然而这两种技术之间并不是不可调和的。作者分别列举了容器技术以及虚拟化技术的优缺点,并提出将两者结合取长补短的解决方案。

容器为应用程序提供了隔离的运行空间:每个容器内都包含一个独享的完整用户环境空间,并且一个容器内的变动不会影响其他容器的运行环境。为了能达到这种效果,容器技术使用了一系列的系统级别的机制诸如利用Linux namespaces来进行空间隔离,通过文件系统的挂载点来决定容器可以访问哪些文件,通过cgroups来确定每个容器可以利用多少资源。此外容器之间共享同一个系统内核,这样当同一个库被多个容器使用时,内存的使用效率会得到提升。

对于系统虚拟化技术来说,虚拟层为用户提供了一个完整的虚拟机:包括内核在内的一个完整的系统镜像。CPU虚拟化技术可以为每个用户提供一个独享且和其他用户隔离的系统环境,虚拟层可以为每个用户分配虚拟化后的CPU、内存和IO设备资源。

哪家强?

通常来说,这取决于你的需求。如果你只是希望将应用运行的实例进行隔离,那么对于管理应用运行环境、启动应用实例以及控制资源开销方面容器将是一个极为高效的工具。像Docker这一类的容器,其设计原则就是为了解决这种应用环境的修改以及应用部署的问题,并且这十分符合DevOps理念(你可能希望知道更多关于DevOps理念的内容)。

如果你从服务器虚拟化的角度来寻找最好的环境隔离方案,那么系统级的虚拟化是更好的方案:和容器相比,邻居租户(Noisy neighbours )对系统的影响在虚拟化的方案下将不是一个问题。尽管现在很多容器都在专注于提高其隔离能力,但是虚拟机的隔离还是要优于容器。从物理服务器过渡到虚拟服务器是一个很自然的过程,并且现在针对虚拟服务器的管理的生态系统也很完善。

在z系统中,Linux具有很好的伸缩性(运行容器),但是z是一个极度高效虚拟化(运行虚拟服务器)的平台,它继承了整个系统架构。尽管没有精确的测量,将虚拟化和容器技术相结合,在z系统中会比其他平台要容易。

还有第三条路:两者兼而有之。

有多种方式可以将系统虚拟化及容器技术相结合:

1.一个容器中运行一个虚拟机

Docker在部署容器方面十分灵活。其中一个选择(execution driver)是利用KVM镜像。这样就可以在最好的隔离性情况下发挥DevOps所擅长的使用Docker各种方式。但是这也付出了需要在启动容器时启动整个操作系统实例的代价。这也就意味着较长的启动时间以及低效的内存使用,只能通过内核共享内存(KSM)来提升内存利用率。这种方法效果和效率都不理想,但是这是一个好的开始。

2.一个虚拟机中运行一个容器

与之相反的,你一可以在虚拟机中启动一个容器。这里的虚拟机并不是由Docker控制,而是通过现有的虚拟化管理设施来控制。一旦系统实例启动,就可以通过Docker来运行容器而武器其他特殊的设置。同时,由于不同容器运行在不同的虚拟机上,容器之间也能有很好的隔离。而内存的使用率需要通过虚拟层的内存共享来提升。

2b.一个虚拟机中运行多个容器

对于多租户的情况,可以用另一种形式在虚拟机中运行Docker。这种情况下,我们假设在不同租户的容器之间需要强隔离,而对于同一用户的不同容器,简单的Linux容器隔离已经足够。这样我们就可以在减少虚拟机个数的情况下保证租户之间的隔离,同时可以利用Docker带来的各种便利。

总结来说:需要根据实际需求进行选择。

原文链接:Virtualization vs. Containerization? (翻译:刘梦馨 校对:李颖杰)

===========================
译者介绍
刘梦馨,一个做过前端、后端和测试的运维人员,在阿里巴巴挖宝,顺便去点亮 DBA 的技能树。关注Docker,虚拟化和云计算技术。

原文发布时间为:2015-04-19

本文作者:oilbeater

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:虚拟化 VS 容器化

时间: 2024-10-31 18:15:13

虚拟化 VS 容器化的相关文章

企业从虚拟化向容器化迁徙道路上的十大误区

过去的一年中,以Docker为代表的容器化技术成了最热门的云计算词汇,而从虚拟化向容器化过渡也成了一件非常时髦的事情,很多企业经不住诱惑纷纷试水Docker. 但是,随着市场炒作的喧嚣和迷雾渐去,企业的CTO和CIO们发现从虚拟化到容器化的迁徙道路上布满了坑洞.企业云计算技术的未来,也许不会是一边倒的格局,而是结合了类似VMware的可控性和Docker代表的自由.流动和协作趋势. 近日,StackEngine的首席执行官Bob Quillin在VB上撰文指出:企业容器化道路上存在十大误区: 误

容器化和虚拟化哪个才是未来的主流

问题描述 容器化和虚拟化哪个才是未来的主流 随着Devops深入人心,现在docker势头强劲,但是mac和windows都不支持docker,相比较而言,虚拟化比较成熟.容器化和虚拟化哪个才是未来的主流? 解决方案 马上windows docker就要发布了.这不是问题. docker和虚拟化我觉得会并存,就好比飞机出现了不会取代汽车和火车.docker的优势在于灵活部署,但是既有业务还是需要虚拟化来支撑. 解决方案二: 各有千秋 虚拟化适合更大规模集群等 功能更强 docker更偏重应用的虚

Pinterest的容器化实践经验

本文讲的是Pinterest的容器化实践经验[编者的话]本文介绍了Pinterest向容器化平台转型的实践和经验. Pinterest堪称图片版的Twitter,网民可以将感兴趣的图片在Pinterest保存,其他网友可以关注,也可以转发图片. 过去的一年里,Pinterest云管理平台和站点可靠性工程团队关注于将工作负载从EC2实例迁移到Docker容器上.到目前为止,我们已经迁移了超过一半的无状态服务,包括所有的API fleet.该博文给大家分享整个过程中我们的经历和收获. 最近这些年里,

DockOne微信分享(一二八):容器化部署OpenStack的正确姿势

本文讲的是DockOne微信分享(一二八):容器化部署OpenStack的正确姿势[编者的话]当前,以OpenStack为代表的IaaS开源技术和以Docker为代表的PaaS/CaaS容器技术日益成熟,二者如何强强联合,一直是业界颇为关心的焦点领域.本次分享主要是和大家交流基于Docker容器运行和部署OpenStack.那么,安装OpenStack都有哪些方法呢?对于很多刚接触OpenStack的新人而言,安装无疑是一大挑战,同时也直接提高了学习OpenStack云计算的技术门槛. [3 天

DockOne微信分享(一零九):中小型团队的容器化之路

本文讲的是DockOne微信分享(一零九):中小型团队的容器化之路[编者的话]GrowingIO是基于用户行为的新一代数据分析产品,提供全球领先的数据采集和分析技术.企业无需在网站或APP中埋点,即可获取并分析全面.用数据驱动用户和营收的增长.为了应对高速变化的业务增长,我们在系统设计之初就采用了微服务的架构,获得良好的可扩展性.随着时间的推移,微服务的缺点也渐渐体现,人肉运维的成本太高,导致研发效率下降.作为一个中小型团队,我们经过了半年的探索,使用容器相关技术来搭建团队内部的私有PaaS,取

DockOne微信分享(七十五):应用容器化之Kubernetes实践

本文讲的是DockOne微信分享(七十五):应用容器化之Kubernetes实践[编者的话]本次分享主要以ZooKeeper.Redis.Kafka.MongoDB等应用容器化在Kubernetes平台上面实践.从计算.网络.存储方面解析应用在集成中的问题,以及部分传统应用在容器化过程中设计的应用二次开发等问题.首先介绍应用Docker化的需求和局限.接着介绍基础平台,整体环境包括Kubernetes和ECP,然后介绍具体应用如ZooKeeper在集成中的实践,最后介绍部分开源应用在容器化过程中

容器化MYSQL集群在Uber系统中的应用

本文讲的是容器化MYSQL集群在Uber系统中的应用[编者的话]Uber使用的Schemaless存储系统支撑了Uber最重要的服务,如,Mezzanine等.Schemaless 是一个构建在MySQL集群上,可扩展高可用的数据存储.但管理Uber数据量庞大的数据库集群服务需要应用Docker技术. 当集群节点数为16个时,集群管理非常容易,但若集群规模超过1000,并运行了4000多个数据库服务,就需要另一种工具了.之前所有的集群都由 Puppet来管理.大量的临时脚本,以及人工操作已无法满

DockOne微信分享(七十六):容器化ICT融合初体验

本文讲的是DockOne微信分享(七十六):容器化ICT融合初体验[编者的话]本次将分享的容器化ICT融合平台是一种面向未来ICT系统的新型云计算PaaS平台,它基于容器这一轻量级的虚拟化技术以及自动化的"微服务"管理架构,能够有效支撑应用快速上线和自动扩缩容,最大化IT基础设施资源利用率并降低总体拥有成本(TCO).未来的网络正在向IT化.云化方向发展,容器与微服务技术,完美契合"网络即服务".网络切片等发展理念,将有助于实现更加灵活.智能.高效和开放的5G新型网

Docker生态系统系列之二:容器化综述

本文讲的是Docker生态系统系列之二:容器化综述,[编者的话]本篇文章是介绍Docker生态系统的第二篇,该文章首先简要介绍了Linux容器化的历史,然后介绍容器化的优点,再讨论Dockerfile的优点,最后讨论了容器化应用的架构. 应用的迁移部署是一件非常复杂的事情.我们不仅要针对每个环境单独调整,可能还会面临其它的问题,比如检查依赖.扩展应用.在不影响整体应用的情况下单独更新组件. Docker容器化的思想和面向服务式的设计模式试图解决这些问题.应用程序可以拆分为可管理的且按功能划分的组