2014年云计算市场中最火热的莫过于docker了,OpenStack项目从默默无闻到全球瞩目用了3年多时间,而Docker的成功只用了15个月。
在给不同的人介绍了Docker以后,我发现一个很有趣的现象,一些惊呼“这就是我要的!”,而一些学员听完以后并不能完全理解docker的好处,其中被问及最多的一个问题是“Docker和虚拟机有什么区别?”。
Docker解决的问题其实和虚拟机并不完全相同。在以虚拟机为基础的云服务模式中,虚拟机做为IT基础设施提供给用户,用户拿到虚拟机的访问方式以后再在上面构建自己的应用环境,然后部署应用,这就好像造完房子以后,把一个空房间交给了买房的人。这是一种完全自下而上的IT基础设施供给行为,但从一个空房到可以给人入住,我们还有很多事情要做,要采购家具,购置生活用品,布置房间,让一切符合我们的生活习惯。因此,在我们向往的美好生活和一个空房间之间还有相当大的鸿沟,这个鸿沟也体现在IT应用与IT基础设施之间。尤其在如今对应用提出了快速开发,快速迭代,快速部署等要求以后,如何保证应用环境的稳定,一致和便捷就更让人感觉头痛了。
为了解决这个问题,出现了PaaS:装修房。装修房解决了快速入住的问题,用标准化的软件组件来装修你的虚拟机,这样,你入住的虚拟机的时候就不需要从头开始安装各种需要的软件了,拎包入住。但现有的PaaS模式并没有完全解决应用部署的问题,当应用需要用到标准组件的时候,使用PaaS服务是个非常好的选择,可是应用是相当灵活的,每个应用的不同之处在于它的代码,它的架构,这些都是应用独有而PaaS无法触及的。
Docker通过新的思路,解决了应用部署的问题。想象一下Docker就是一个集装箱,你所有的生活设施,家具,布置,私人物品都在这个集装箱内。搬家的时候,你把这个集装箱从一个地方搬到另外一个地方,你所有的物品,摆设,家具都原封不动,只是从一个地方移到了另外一个地方,或者只是这个集装箱的空间和容量变大了,其他一切都没变化。
开发人员是最乐见于Docker的这种应用部署模式,因为应用的生命周期起始于开发人员的开发系统,经过开发,测试,压力测试,等过程,最终应用被发布到生产系统,并可能在不同的生产系统中迁移。应用开发人员对此都会有切身的体会,任何微小的运行环境的错误都会导致应用出现问题,尤其在讲究快速敏捷的今天,应用模块,新的代码,新的配置,被快速的加入应用的环境中,可能还没等写入到文档,新特性就已经被推送到生产上了。
如果在应用的生命周期中可以保证应用的运行环境一直被封装在一个固定的容器中,对于开发人员来说,这才是真正的快速,不再需要为应用的运行环境再操心,可以更加专注于应用本身,因为应用的整个生命周期都被封装在同一个运行环境(容器)中。
这就是Docker,虚拟机的做法是“到一个地方就部署一次应用“,而Docker的做法是“应用与它的运行环境始终封装在一起,到哪里都是应用带着运行环境一起”。
细心的读者会说,虚拟机的方式,也可以做到这种“带着运行环境一起”的方式,无非就是把虚拟机的镜像整体导出,再倒入到新的环境中,对,区别是虚拟机镜像在带着应用运行环境的同时还带着操作系统的镜像,与只携带必要的应用运行环境的Docker方式相比较,虚拟机的镜像就显得太重,太大,不灵活。
当然Docker与虚拟机比还会有些别的好处,比如,从资源利用的角度来说,通过虚拟机封装的应用是个完整的操作系统和虚拟主机,而Docker封装的只是应用使用到的进程,因此相比虚拟机的方式,Docker的封装方式少了虚拟操作系统和虚拟机两个对应用运行并无太大作用的层次。因此主机整体的资源利用率会因此大大提高。
Docker的容器模式刚刚起步,还有很多不足的地方,在软件成熟度上也还未被企业关键应用所接受,但最为云计算技术中的一个新方向,它为在云环境中快速部署和迁移应用提供了全新的解决方案。
这就是神奇的Docker,一个轻量级的容器。