Docker技术实现分析
2015-05-13陈清金陈存香
陈清金 陈存香 张 岩
1 中国联通云数据有限公司 北京 100032
2 中国联合网络通信有限公司 北京 100033
随着互联网的迅猛发展,云计算作为一种商业计算模式在搜索服务、移动商务、开放协作等多样化需求的推动下迅速发展起来[1]。云计算以动态的、易扩展等优势提供了虚拟化资源的计算和存储方式,并受到Google、IBM、Amazon、Microsoft等IT厂商的大力推广和应用[2]。
云计算包括基础设施即服务(Infrastructure as a Service,IaaS),平台即服务(Platform as a Service,PaaS)和软件即服务(Software as a Service,SaaS)[3]。基于PaaS平台,用户/开发者可以便捷地开发和部署应用程序,将应用程序托管在PaaS管理的云基础设施中,从而节省大量的平台搭建和维护工作,并达到缩短开发周期,降低运维成本的目的[4]。Docker作为轻量级的虚拟化方式,实现了PaaS平台的高效部署、运行和维护。
1 研究背景
PaaS的核心技术之一就是虚拟化。维基百科将虚拟化定义为:虚拟化技术是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源[5]。
虚拟化主要分为两大类,即基于硬件的虚拟化和基于软件的虚拟化。基于软件的虚拟化分为应用虚拟化和平台虚拟化。虚拟机(Virtual Machine,VM)技术属于平台虚拟化。应用虚拟化可细分为完全虚拟化、硬件辅助虚拟化、部分虚拟化、超虚拟化、操作系统级虚拟化。Docker属于操作系统级的虚拟化。
2 Docker技术剖析
Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,基于go语言并遵从Apache2.0协议[6]。目前,已经有很多相关项目,逐渐形成了Docker生态圈。Docker自2013年发布以来,就成为了炙手可热的PaaS项目。Redhat[7]、Google[8]、IBM[9]、百度[10]、阿里巴巴[11]等都相继集成了对Docker的支持。
Docker的最终目的是实现“build、ship and run any app、anywhere”,即通过对应用组件的封装(Packaging)、分发、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,随处运行”。应用组件包括Web应用、数据库服务、操作系统或编译器。
2.1 Docker体系机构
Docker是一个客户/服务器(Client/Server,CS)架构(见图1)。Docker客户端是远程控制器,可通过TCP/REST向Docker Host发送请求,包括创建容器、运行容器、保存容器、删除容器等请求。Docker服务端的Daemon对客户端的请求进行相应的管理,随后通过driver转发至容器中的libcontainer执行环境。libcontainer提供与不同Linux内核隔离的接口,类似命名空间及控制组。这种架构允许多个容器在共享同一个Linux内核的情况下完全隔离地运行。由于Docker容器并不需要专用操作系统,因此,实现了轻量级的要求。
图1 Docker体系架构
2.2 Docker关键要素
Docker的核心要素有镜像(Image)、容器(Container)和仓库(Registry)。镜像是一个面向Docker引擎的只读模板,包含文件系统,它是构建容器的基础。一个镜像中可以包含完整的操作系统及相应的应用软件。用户可以根据需求自己创建或者下载他人创建的镜像。容器是从镜像创建的运行实例。镜像可以理解为构建或打包阶段,而容器可理解为启动或执行阶段。Registry用来保存用户创建的镜像。镜像来源主要有用户定制和Docker自有两种,前者称为私有Registry,后者称为公共Registry,也叫做Docker Hub。
2.3 Docker优势
Docker虚拟化的主要优势有4个方面。1)简化服务器迁移带来的环境再部署,提高工作效率,并降低部署过程中出现问题的风险系数。2)缩短环境交付和部署的周期。使用Docker,开发人员可通过镜像快速部署开发环境,并能在开发结束后,平滑移交给运维和测试人员。同时,容器的维护相对简单快捷,节约开发、测试、部署时间,可实现快速迭代。3)提高物理资源的利用率。由于Docker容器所占的存储空间相对较小,同时删除容器后,相应的文件也会被删除,这样可大大提高物理资源的使用率。4)更简单快捷的迭代策略。Dockersf i le实现了开发环境中的配置更新可快速反馈到生产环境中,实现了自动化的高效管理。
3 Docker和VM分析比较
从上述Docker分析中可以发现VM和Docker存在一定的差异,下面对两者之间的技术实现和性能进行对比分析。
3.1 VM和Docker技术实现分析
Docker中容器停止后,对创建容器时镜像的初始状态所做的操作都会丢失。虚拟机停止后,大部分文件(除去部分临时文件)不会被删除。这就使得虚拟机所占的存储空间远远大于Docker。
Docker可采用标准的IPC机制进行通信,如隧道、Sockets等,虚拟机只能通过以太网的方式进行通信。
Docker可直接运行于宿主机的内核上,不同容器可以共享同一个Linux内核,虚拟机则需要运行于Hypervisor之上(见图2)。
图2 VM与Docker虚拟化实现方式对比
3.2 VM和Docker性能分析
作为一种轻量级的虚拟化方式,Docker在性能上还是略优于VM的,具体的性能分析比较见表1。
表1 Docker与虚拟机性能对比
从表1中的分析比较可以明显发现,利用Docker技术,物理服务器可以承载更多的容器,资源的使用率大大提高,这也是云计算需要达到的真正目的。
4 Docker与OpenStack结合
OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目[12]。该项目得到了AMD、IBM、Intel的青睐。同时,也成为2014年最受关注的开源项目;因此,Docker与OpenStack的结合是未来PaaS平台发展的一大趋势。二者的结合主要基于Heat和Nova两种,下面分别就这两种方式进行分析。
1) Docker与Nova集成。通过driver形式实现了Docker与Openstack的集成(见图3)。Openstack的Nova中,command和dashboard通过API接口与compute连接,compute与Docker的driver通过API连接,由此实现了二者的关联。Docker的registry镜像以及driver的数据都将反馈给Glance。这个过程中Docker容器当作虚拟机来使用。
图3 Docker与Nova集成
2) Docker与Heat集成(见图4)。Docker与Nova的集成中将Docker以虚拟机的形式使用,无法发挥出容器的独有优势;因此,出现了Heat与Docker的集成方案。Heat通过Plugin API与相应插件关联,进而通过API或者HTTP关联Docker。利用Heat中的插件机制,可实现Openstack部署和管理Docker容器。
图4 Docker与Heat集成
5 总结
Docker自发布以来,一直受到业界的热捧。这个开源的容器引擎使得开发者可以通过镜像打包自己的应用以及运行环境,实现快速开发、快速部署、快速迭代。同时,沙箱机制可降低接口之间的数据开销,提高硬件的资源利用率。但是关于Docker与现有开源架构的研究还需进一步完善。
参考文献
[1]袁璐,李仁发.云环境下动态信任模型研究综述[D/OL].(2010-10-20)[2015-02-02].http://www.paper.edu.cn/html/releasepaper/2010/10/364/
[2]Daniel Nations.What is Cloud Computing?[EB/OL].[2015-01-05].http://webtrends.about.com/od/enterprise20/a/cloud-computing.htm
[3]互动百科.云计算[EB/OL].[2015-02-02].http://www.hudong.com/wiki/%E4%BA%91%E8%AE%A1%E7%AE%97
[4]林琳,滕腾,李伟彬.PaaS的范畴及架构标准化研究[J].信息技术与标准化,2012(10):25-32
[5]虚拟化技术[EB/OL].[2015-02-02].http://zh.wikipedia.org/wiki/%E8%99%9B%E6%93%AC%E5%8C%96
[6]Dua,Bangalore,Raja.Virtualization vs Containerization to Support PaaS[J].IEEE,2014,41:610-614
[7]Red Hat推出专为Docker定制的Linux发行版[EB/OL].[2015-02-02].http://www.infoq.com/cn/news/2015/03/redhat-docker-linux.2015
[8]Google拥抱Docker:把互联网变成一个巨大的计算机[EB/OL].[2015-2-02].http://www.pingwest.com/google-docker/
[9]IBM和Docker宣布建立战略伙伴关系[EB/OL].[2015-02-02].http://www.oschina.net/news/58186/ibm-docker
[10]国内“BAT”先锋企业百度Baidu App Engine(BAE)平台[EB/OL].[2015-02-02].http://www.xueliedu.com/a/xinwenzixun/2015/0220/280618.html
[11]Docker周报:阿里云ECS支持Docker[EB/OL].[2015-02-02].http://www.infoq.com/cn/news/2014/10/dockeraliyun-ecs?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global
[12]谁在掌管着OpenStack项目[EB/OL].[2015-02-02].http://os.51cto.com/art/201111/304714.htm