Solomon Hykes创立了Docker,没有想到过Docker会人气爆棚,成为仅次于OpenStack的最受欢迎的云开源项目。
然而听说过Docker的朋友很少知道其真正的意义,很多人会被各种概念混淆,甚至把OpenStack和Docker进行类比,三周前看到一篇好文章(虽然发此篇时间上已经优势全无,但依仗我们精准的理解,翻译和挑选眼光,还是决定无耻滴发了),答案可以在以下这篇Nati Shalom的博文中找到,在此感谢朱荣泽同学的技术翻译矫正。
(原文链接http://natishalom.typepad.com/nati_shaloms_blog/2014/11/do-i-need-openstack-if-i-use-docker.html)
Docker从一个新兴的技术到一个商品化模式,这一过程的发展速度很惊人,它炙手可热的同时也给带来一些困惑。
笔者从一些刚开始用Docker的同学听到一些评论和疑问: 假如用了Docker再去用OpenStack是否合适?
讨论之前,先介绍Docker的相关背景:
简单来说,Docker提供了一种程序运行的容器,同时保证这些容器相互隔离。虚拟机也有类似的功能,但是它通过Hypervisor创建了一个完整的操作系统栈。不同于虚拟机的方式,Docker依赖于Linux自带的LXC(Linux Containers)技术。LXC利用了Linux可以对进程做内存、CPU、网络隔离的特性。Docker镜像不需要新启动一个操作系统,因此提供了一种轻量级的打包和运行程序的方式。而且Docker能够直接访问硬件,从而使它的I/O操作比虚拟机要快得多。Docker可以直接跑在物理服务器上,这引起大家的疑问:假如已经用了Docker,还有必要使用OpenStack吗?
最近Boden Russell在DockerCon上做了关于Docker和KVM的性能测试对比图表。和预期的一样,启动KVM和Docker容器的时间差异非常显著,而且在内存和CPU利用率上,双方差距非常大,如下表所示。
双方巨大的性能差异,导致了在相同工作负载下,KVM需要更多的CPU和内存资源,导致成本上升。
观点如下:
1,这个问题和OpenStack没有直接的联系,也可以套在其他云平台上。大家为什么会拿Docker和OpenStack做比较的原因是:OpenStack是私有云环境中最流行的云平台,在私有云环境中,大家认为可以把Docker作为另一种选择。
2,有关于Hypervisor的误区:
很多KVM和Docker的性能测试的对比跟OpenStack一点关系都没有,因为OpenStack只是一种框架。事实上这种性能测试(不管是KVM还是Docker)是跑在OpenStack下,这表明了KVM和Docker可以共存。当使用OpenStack去管理Docker情况下,Docker和OpenStack的争论是没有意义的。
3,云平台提供一个完整管理数据中心的解决方案,至于用哪种hypervisor或container只是云平台中的一个小部分。像OpenStack这样的云平台包含了多租户的安全、隔离、管理、监控、存储、网络等其他部分。云数据中心的管理需要很多服务支撑,但这和用Docker还是KVM其实没多大关系。
4,Docker不是一个全功能的VM, 它有很多严重的缺陷,比如安全、Windows支持,因此不能完全替代KVM。现在Docker社区一直在弥补这些缺陷,当然这会带来一定的性能损耗。
5,原生hypervisor的性能、容器化的性能、应用的性能是不一样的东西,相互对比没有意义。
6,把Docker容器打包进KVM镜像中对Docker运行几乎没有影响。这种架构通常是用hypervisor来管理计算资源,而像Heat、Cloudify、Kubernetes这样的的orchestration layer都用于管理在hypervisor中的docker容器。
结论:
正确看待OpenStack、KVM、Docker的方式应该是: OpenStack用于管理整个数据中心,KVM和Docker作为相应的补充,KVM用于多租户的计算资源管理,Docker Container用于应用程序的打包部署。
在这种场景下,Docker的作用是:
1,Docker提供一种特定的软件打包方式,使得软件可以保持在相同的环境下运行。
2,Docker为微服务提供了很好的容器。
3,Docker在OpenStac、裸机上运行几乎一样。
总得来说,对于大部分的应用场景,使用那种云平台都可以。比如我要给一个DevOps小组提供自动化开发和测试环境,我会考虑直接在物理服务器上跑Docker。
Orchestration对于这两种环境(OpenStack和Docker)是很好的抽象工具。
使用Docker的Orchestration框架的好处是可以在任意时候在OpenStack和裸机环境中切换,也就是说你可以指定Docker跑在OpenStack或裸机环境中。OpenStack Orchestration工具Heat从Icehouse版本开始支持Docker。Cloudify是一个基于开源TOSCA 的Orchestration,它可以跑在openstack、VMwara、AWS、裸机环境中,最近也支持Docker。