反思|容器与虚拟机的真正区别在哪里?

本文讲的是反思|容器与虚拟机的真正区别在哪里,【编者的话】本文主要介绍了容器与虚拟机的区别,在策略、性能以及安全等方面,作者一一回答了目前人们对容器与虚拟机区别的疑问。

“Docker和虚拟机有什么不同?”,这似乎是我听到的有关容器最常见的问题之一,我一般给出的答案取决于提出此问题的不同方式。但是我喜欢这样开头:“容器和虚拟机仅仅相似于它们都提供了隔离环境。” 接着我阐述他们之间的差异,“容器能做的事少得多并且使用起来相当廉价。而虚拟机提供整个虚拟化硬件层,可以做更多的事情但是使用成本显著。“ 我想有人会有疑问的最大的原因是这两种技术在功能上似乎类似,至少在第一点看来。

“它如何影响我的部署策略?”

有人希望直接跳到结论或者他们想要的结果。 “这样会如何影响我的部署策略?我刚上云,难道真的要改变一切,重新来过?这要花费多少?这要花费多大精力来学习呢?“

如果你从头到尾的解释给他们听,通常他们会由怀疑变成好奇。向他们展示那些项目,比如Docker,如何更简单地使用容器,如何将已经实现的项目与他们在使用的工具整合。他们会明白的,虽然还是有一些工作要做,但是学习和整合很容易。他们仍会希望得到更多的细节。

“它的性能如何?”

“它的性能如何?” 这个问题甚至比第一个还要常见。我不确定他们希望听到什么,还有为什么他们会这样问,但是答案会让他们吃惊:性能非常接近裸机(直接地/非虚拟化)的性能。他们不会相信,但是原因就是隔离并不是虚拟化。

Docker volumes只是绑定挂载文件(文件就像指针指向磁盘上的一个位置,它创建一个绑定挂载仅仅是创建一个指向同一地点的另一个文件而已)。读取或写入该文件基本上像裸机操作的那样廉价。另一方面,读取或写入Volume以外的Docker容器文件系统比较昂贵。所以说不要那样做。

Docker networking就像裸机的网络。有一组用于每个容器而创建的虚拟(即逻辑的)以太网接口。任何网络性能下降是由于额外的内部跳动,比如:NAT。

容器的建立在一组Linux内核提供的功能墙壁上。对于IO(如果有的话)很少需要额外的处理或重定向。容器是廉价的。因为 使它们工作的软件是内置于操作系统中的,因此你可以停止(或至少减少)虚拟化软件的开支(或云实例)。

“它是不是比虚拟机更不安全呢?”

当然,精明健谈的会问,“它是不是比虚拟机更不安全呢?” 目前来说也许是的......。

这个比较复杂,因为它取决于你正在拿它们做什么。为了全面了解请参考PPT - Docker,Linux容器(LXC)与安全 by Jérôme Petazzoni。我会尽力来总结概括。

容器使用由Linux内核提供的命名空间。大多数人把命名空间认为是一个上下文或域的授权决定(进程X有权访问资源Y)。

如果容器内的进程扫描文件系统来寻找要窃取的东西,它只能找到容器内明确可见的文件。如果容器内的进程中想尝试做一些恶意的事情,比如打开端口31337后门服务,它不会有多大好处,因为这个端口实际上不会暴露在容器外的任何地方。容器内部的恶意进程不能访问的任何容器外的其他进程的内存。

有几个方法可以摆脱容器的束缚,但这些通常需要容器的root访问权限。不要以root运行应用程序。通过简单的几个步骤稳固root访问权限。

容器使用cgroup来提供与虚拟机相同级别的资源使用保护机制。容器和虚拟机都可以获取整个网络链接。

有些人会指出并非所有的Linux内核是命名空间的。这意味着有一些资源尚未隔离。这可能是真的,但它正在发生变化。集成的其他稳固的工具,像AppArmor或SELinux,可以帮助你构建一些真正的堡垒。如果有额外的工作来使容器达到与虚拟机相同的安全级别,那么它是值得的。

  • 容器提供的隔离对于更密切的软件集成可以声明性地减少。虚拟机则是刚性的。
  • 容器运行的是不完整的操作系统(尽管它们可以)。虚拟机必须运行完整的。
  • 容器比虚拟机使用更少的闲置资源。它们不运行完整的操作系统。
  • 容器在在云硬件(或虚拟机)中可以被复用,就像虚拟机在裸机上可以被复用。所不同的是...
  • 容器需要毫秒分配。虚拟机需要几分钟。所以,你可以另配、重新平衡、释放以及使用容器比虚拟机的迭代更加迅速。

老实说,我感觉大多数傻傻的。以我的经验最常见的原因是人们提供硬件(虚拟或物理)是提供的隔离。

隔离

如果每个容器运行的只有一个服务或者数据库,这是比较容易管理的。而且比较容易监控性能,了解故障的影响,并预测成本。像亚马逊公司,团队拥有他们自己的软件和硬件,隔离是其中的关键。你有没有与其他团队分享过一个负载均衡的重要资源?那么,当因为你的服务把他们的VIP设置为激增队列来代替外溢,它们会失败或者在半夜你被叫醒,你就会渴望有隔离了。

离目标进程越远,隔离会变得更昂贵。虚拟机是伟大的,它通过抽象来增加并行,服务于多操作系统的使用情况以及业界最好的安全性。但对于隔离,它们相当的昂贵。

容器提供的隔离就便宜。趁热得到它。

如果你想到阅读更多有关Docker和容器的内容,请查阅我的书《Docker in Action》。目前可以在Manning Early Access Program浏览电子版。

原文链接:Containerization is not Virtualization (翻译:田浩浩 )

===========================
译者介绍
田浩浩,USYD研究生,专注Docker学习研究 
Email: htia6761@uni.sydney.edu.au

原文发布时间为:2015-10-09 

本文作者:田浩浩 

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

原文标题:反思|容器与虚拟机的真正区别在哪里?

时间: 2024-08-05 14:37:05

反思|容器与虚拟机的真正区别在哪里?的相关文章

容器 VS. 虚拟机:云中应该使用哪一种?

在开足马力使用容器之前,了解容器与虚拟机在私有云.公共云以及混合云部署之间的区别是至关重要的. 虽然目前大多数的云部署都是基于虚拟机的,但是容器技术为云用户带来了显著的好处.但是,在选择一个取代之前技术的替代品时,了解两者之间的主要区别是很重要的.最大的问题在于虚拟机或容器是否最适合公共云.私有云或混合云模式.这个问题的答案取决于三个主要因素:虚拟机和容器之间的功能性差异.私有云和公共云组件之间的相互依存程度以及用户对他们自己云平台进行定制的意愿. 容器与虚拟机:两者之间的不同 虚拟机和容器两种

容器相比虚拟机更为安全的十三个方面

本文讲的是容器相比虚拟机更为安全的十三个方面[编者的话]容器的安全性一直是架构师们的心病,担心隔离性弱被攻破,而纠结于是否选择容器.本文将围绕容器的安全特性,从容器设置以及容器应用的最佳实践出发,总结13个方面,说明容器为何比虚拟机更加安全的原因.希望能够对您的容器安全加固有所帮助. 去年,普遍观念认为容器的安全性远不如虚拟机.为什么呢 ?由于容器的抽象层极易被攻破,因此容器的安全无疑比通过硬件VT-x优化后的虚拟机抽象层薄弱的多 .一旦攻防松懈,恶意代码便可轻松攻击主机.更糟糕的是,一旦主机妥

容器还是虚拟机 并不一定非此即彼

许多人认为在容器和虚拟机之间只能选择其中一种,但事实并非如此--下面将详细介绍其中的原因. IT专家一直在尝试解决一个问题:应该怎样在容器和虚拟机之间做出选择,而现在的解决方案是同时使用两种技术. 虚拟机和容器技术是实现虚拟化的两种不同方式,二者都能够实现多种应用程序共享相同硬件资源,但是其技术特点.优势以及劣势却完全不同,这周Container World的与会者尤为深刻地感受到了这一点. 从易于使用和自动化的角度来看,容器技术似乎更加占据优势. "相比于虚拟机,容器技术要简单的多,"

容器与虚拟机究竟有何本质上的差异?

作为一种部署应用程序的全新方式,容器技术在短时间内获得了广泛关注,但是这种技术同样存在某些限制,并且和虚拟机存在本质上的不同. 虚拟化技术已经改变了现代计算方式,它能够提升系统资源使用效率.消除应用程序和底层硬件之间的依赖关系,同时加强负载的可以移植性和安全性,但是hypervisor和虚拟机只是部署虚拟负载的方式之一.作为一种能够替代传统虚拟化技术的解决方案,容器虚拟化技术凭借其高效性和可靠性得到了快速发展,它能够提供新的特性,并且帮助数据中心专家解决新的顾虑. 容器和虚拟机之间的主要区别在于

论数据中心虚拟化两大技术代表:容器和虚拟机

如今,虚拟化技术在数据中心内已经生根发芽,应用非常普及,无论是在服务器.还是网络.存储等设备中都是如此.虚拟化技术起源于服务器,后来在网络设备中也出现,虽然都叫虚拟化技术,但是实现的原理是完全不同的,网络设备中的虚拟化也不能像服务器中的虚拟化可以虚拟化出数百或上千的虚拟设备,实现的技术也完全不同.本文着重讲述的是服务器中的虚拟化技术.服务器是数据中心最为重要的组成部分,所有的应用服务都要安装在服务器上,并运行,所以服务器上的虚拟化技术与应用最为密切相关.从早年的虚拟机技术到如今的容器技术,都是虚

技术讨论:微服务和容器比虚拟机快多少?

本文讲的是技术讨论:微服务和容器比虚拟机快多少?[编者的话]本文是Microscaling Systems的联合创始人Anne Currie在微服务日伦敦站的演讲整理稿,通过阅读本文可以深入了解到当和虚拟机比较时,微服务和容器的速度和效率. Anne Currie,Microscaling Systems的联合创始人,提供了一个关于为何采用容器的很好概述.请享受她最初在微服务日伦敦站的演讲,该演讲研究了什么使得微服务和容器的结合如此强大. 希望你能和我们一样享受这个演讲. 视频 幻灯片 今天,你

【译闻】容器的管理,也是一门艺术

前言 容器和虚拟机之间有几分相近,也有很大区别,我们应该学会在正确的时间,正确地使用容器与虚拟机,以消除它们之间的混淆.本文就容器和虚拟机的使用和管理提供了一些建议.   众所周知,如果你只需要处理一种类型的容器,那么在云环境中管理容器就很简单.可一旦面对容器集群的管理,面对这种多样化技术,那必将伴随着一系列全新的管理挑战.成功管理的关键在于,你要在坠入陷阱之前敏锐地发现它.   最简单的容器使用场景是将现有的应用程序打包进Docker容器并分发:将所有应用程序的附属项都封装到Docker映像中

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

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

Docker到底是什么?Docker为什么它这么火!_docker

Xcode 是运行在操作系统Mac OS X上的集成开发工具(IDE),由苹果公司开发.Xcode是开发OS X 和 iOS 应用程序的最快捷的方式.Xcode 具有统一的用户界面设计,编码.测试.调试都在一个简单的窗口内完成. 背景介绍 Xcode前身是继承自NeXT的Project Builder. The Xcode suite 包含有GNU Compiler Collection自由软件 (GCC. apple-darwin9-gcc-4.0.1 以及 apple-darwin9-gcc