Docker的优势和局限性
Docker有哪些好的特性?
作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。首先, Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次, Docker对系统资源的利用率很高,一台主机上可以同时运行数千个Docker容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行10个不同的应用就要起10个虚拟机,而Docker只需要启动10个隔离的应用即可。
具体说来, Docker 在如下几个方面具有较大的优势。
1)更快速的交付和部署
对开发和运维(devops)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2)更高效的虚拟化
Docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3)更轻松的迁移和扩展
4)更简单的管理
5)CPU/内存的低消耗
6)快速开/关机
7)跨云计算基础构架
Docker的局限性有哪些?
Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:
1)Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用。
2)LXC是基于Cgroup等Linux kernel功能的,因此Container的Guest系统只能是Linux base的。
3)隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库。
网络管理相对简单,主要是基于namespace隔离。
4)cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)。
5)docker对disk的管理比较有限。
6)container随着用户进程的停止而销毁,container中的log等用户数据不便收集。
所以针对以上局限性可以分为以下的适用性:
针对1-2,有windows base应用的需求的基本可以pass了。
针对3-5,主要是看用户的需求,到底是需要一个container还是一个VM,同时也决定了docker作为 IaaS 不太可行。
针对6-7,虽然是docker本身不支持的功能,但是可以通过其他手段解决(disk quota, mount –bind)。
总之,选用container还是vm,就是在隔离性和资源复用性上做权衡。另外即便docker 0.7能够支持非AUFS的文件系统,但是由于其功能还不稳定,商业应用或许会存在问题,而AUFS的稳定版需要kernel 3.8, 所以如果想复制dotcloud的成功案例,可能需要考虑升级kernel或者换用ubuntu的server版本(后者提供deb更新)。这也是为什么开源界更倾向于支持ubuntu的原因(kernel版本)。
Docker解决了什么问题?
云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队之间如何高效协调,快速交付产品,快速部署应用,以及满足企业业务需求,是开发人员亟需解决的问题。Docker技术恰好可以帮助开发人员解决这些问题。
为了解决开发人员和运维人员之间的协作关系,加快应用交付速度,越来越多的企业引入了DevOps这一概念。但是,传统的开发过程中,开发、测试、运维是三个独立运作的团队,团队之间沟通不畅,开发运维之间冲突时有发生,导致协作效率低下,产品交付延迟, 影响了企业的业务运行。Docker技术将应用以集装箱的方式打包交付,使应用在不同的团队中共享,通过镜像的方式应用可以部署于任何环境中。这样避免了各团队之间的协作问题的出现,成为企业实现DevOps目标的重要工具。以容器方式交付的Docker技术支持不断地开发迭代,大大提升了产品开发和交付速度。
此外,与通过Hypervisor把底层设备虚拟化的虚拟机不同,Docker直接移植于Linux内核之上,通过运行Linux进程将底层设备虚拟隔离,这样系统性能的损耗也要比虚拟机低的多,几乎可以忽略。同时,Docker应用容器的启停非常高效,可以支持大规模的分布系统的水平扩展,真正给企业开发带来福音。
正如云技术专家刘艳凯所说的那样:“任何一项技术的发展和它受到的追捧,都是因为它能够解决困扰人们的问题,”Docker正是这样的一种技术。Docker的解决问题能力虽然很强,但在企业中的实际应用却并不多,那么是什么问题阻碍了Docker在企业中的实践?
Docker安全性问题
1)Docker环境安全
Docker的势头在过去的12个月里十分火热,很多人表示很少见如此能够吸引行业兴趣的新兴技术。然而,当兴奋转化为实际部署时,企业需要注意Docker的安全性。了解Docker的人都知道,Docker利用容器将资源进行有效隔离。因此容器相当于与Linux OS和hypervisor有着几乎相同的安全运行管理和配置管理级别。但当Docker涉及到安全运营与管理,以及具有保密性、完整性和可用性的通用控件的支持时,Docker可能会让你失望。
当Docker运行在云提供商平台上时,Docker安全性变得更加复杂。你需要知道云提供商正在做什么,或许你正在于别人共享一台机器。Docker虽然容器没有内置的安全因素,而且像Docker这样的新兴技术很难有比较全面的安全措施,但这并不意味着以后也不会出现。
2)Docker确保容器部署安全性
也有专家将Docker安全问题的实质定位于配置安全,认为Docker目前的问题是很难配置一个安全的容器。虽然现在Docker的开发人员通过创建非常小的容器来降低攻击面,但问题在于大型企业内部在生产环境中运行Docker容器的员工需要有更多的可见性和可控性。企业在部署数千或数万台Docker容器时,能够确保这些Docker容器都遵守企业安全策略进行配置是至关重要的事情。
Docker为解决这个问题,就需要增加Docker容器部署的实时可见性,同时实施企业制定的安全策略。也有一些厂商为此推出解决方案,给运营商提供了实时可见性并帮助他们执行容器级别的虚拟基础设施的安全策略。