Docker vs Chef

2016-04-06 12:48:00
admin
原创
1986
摘要:对Docker同DevOps的自动化工具(Chef, Puppet)进行了对比。

“我享受从头开始手工部署一台全新服务器的漫长过程”,没有人会这样说。对于系统管理员或者DevOps人员来说,一个很不喜欢的事情就是在等待创建一台全新服务器过程中拨弄手指头。由于虚拟化和云计算带来的对计算能力的爆炸性需求,新建服务器的频率提高了。

幸运的是我们有了Docker和Chef这样的工具。他俩都可以在多服务器场合下,我们对于服务器更改的定义和实现变得很简单。但是他们采用了完全不同的实现路径,下面我们将要看到。

他们是什么?

Docker做开始作为dotCloud的一个开源项目而存在,但是当创建者发现Docker的潜力之后,它快速成为了最高的优先级。Docker是一个用Go语言实现的、仅适用于Linux的、构建在LXC容器之上并用以创建虚拟环境的工具。请注意,这里说的是VE(虚拟环境),而不是虚拟机(VM)。虚拟机是由虚拟化工具或者模拟器(HyperV、VMWare等)创建的,是包含了OS、磁盘配置、网络甚至虚拟处理器的原始机器的完全镜像。正因为如此,VM消耗了较大的磁盘空间,并且很难快速部署和启动。

Docker通过将OS和内核分离来解决这个问题。它从原始机器内核的基线中创建了一个“Level Zero”的包。任何后续的更改都在此基础上生成快照(Docker里面称为“命名空间”),并且可以作为虚拟系统运行在独立的容器里面。快照仅仅捕捉变化的部分,而不是像VM需要捕捉全部内容。从这一点(快照)之后,命名空间被存储起来,并且可以在任何Docker Ready(具备Docker运行环境)的主机上作为容器独立运行来创建全部的运行环境。

Chef是一个配置管理的工具。同Puppet一样他们是配置管理(CM, Configuration Management)市场的“大孩子”。Chef最早在2009被发布出来,并且在实现配置更新甚至创建新机器上为系统管理员和DevOps人员提供了很大的帮助。Chef支持Windows、Linux和Unix,并提供了GUI。但是Chef过于复杂,特别是对新手具有很高的学习成本。

他们是如何工作的?

Docker并不是创建有着独享OS和处理器以及硬件模拟环境的虚拟主机。VE(虚拟环境)是一个轻量级的VM,它位于已经存在的内核镜像(包括底层硬件)之上,并仅仅创建了一个用以运行应用的容器。它甚至可以重新创建一个OS,但仅仅把后者当作是运行在内核之上的一个应用。可以把Docker当成是LXC的一个超级增强版,并提供了后者不具备的优秀特性:

  • 可移植:用户可以使用Docker去创建一个包含所有应用(包括关联关系)的对象。这个对象可以被移植到任何支持Docker的Linux主机之上并自动运行到预期效果;
  • 版本控制:Docker提供了类似Git的能力来跟踪容器的连续版本变化,捕捉不同版本的差异,提交新的版本,提供回滚能力,等等;
  • 重用:Docker允许对已经创建好的包进行重用。举例来说,如果你需要创建需要Apache和MySQL数据库的不同机器,你可以创建一个包含这两个元素的“基础镜像”,然后在此之上构建新的机器。
  • 共享库:Docker.io提供了数以千计的、现成的容器,他们都是由开源贡献者提供的。同样,可以联想一下AWS上面的不同的配置和分发库,它们是类似的。

想要了解更全面的Docker特性,可以看下面这个链接。

http://stackoverflow.com/questions/17989306/what-does-docker-add-to-just-plain-lxc

Chef采用了一个Master-Agent的结构,由位于核心的Master来协调和分发指令给安装在不同节点上的代理。代理甚至可以通过Knife Tool和SSH部署在客户端。所有这些的管理都通过GUI,或者用Ruby作为DSL通过CLI实现。GUI很有用,但是在很多高级任务的时候还是需要学习使用Ruby。Chef和其他配置管理工具使用了一个“基础架构-即-代码”的模型,即为了保证工作效率,所有被管理的基础设施节点都必须以纯代码的方式表达出来,即Ruby的方式。你定义你需要的更新,以及需要实现更新的机器的子集,Chef服务器做剩下的事情。举个例子,如果你需要将Windows 2008从.Net 2.0更新到.Net 3.0,你需要在Chef服务器上定义出来,由后者自动执行下去。有人认为Chef在Push上的实现,即从Master到Agent,还是很“Low”;更多人建议由Agent定期到Chef服务器上检查更新。不用说,这是一个令Chef创造者都很捉急而正在解决的缺陷。

Chef配置文件被封装在JSON文件中,叫做”食谱”(Cookbook)。软件可以在client-server模式下运行(这种叫Chef-Server模式),或者单独的Chef Server模式(这叫Chef-Solo模式)。Chef吸引人的地方是它有着非常巨大的“食谱”库(来自于网络上Chef使用者的无私分享)。

结论

到底谁更合适,Docker还是Chef?正如其他很多选择一样,答案是“取决于”。取决于你要实现的目标,以及你对工具的控制程度——Chef已经经过长时间验证,Docker还需要磨练(Docker创造者都还犹豫是否建议将其用以生产环境)。实际上,Docker和Chef可以作为互补。Docker可以实现新机器的快速部署,Chef可以用作后续对齐进行小的、详细的更新的实现,而后者Docker并不擅长。相反,Docker比较适合实现“只读”的全新服务器实例。

如果还想要更详细的对比,可以参考下面这个链接。

http://blog.relateiq.com/why-docker-why-not-chef/

 

寄云翻译,转载请注明出处。

原文链接:http://www.scriptrock.com/articles/docker-chef

发表评论
评论通过审核后显示。
新增底部228