【编者的话】Docker简介,介绍了Docker出现的原因以及对Docker的初步认识。
docker开始问世的时候既没有预先宣告,也没有大张旗鼓。docker是在2013年3月15号加利福尼亚州圣克拉拉举办的Python开发者会议上 Solomon Hykes(dotCloud创办者及CEO)用了五分钟闪电演讲介绍的。在公布之前,除dotCloud公司以外只有40人可以使用docker。
docker公布了几个星期以后,使用人数迅速增多,该项目很快就开源化公布在Github上,任何人都可以下载或者贡献该项目。接下来的几个月,越来越多的行业内人士都开始了解docker并且认识到docker将革新原来软件的构建、交付和运行模式。一年的时间里,行业内几乎无人不晓Docker,但很多人还不太清楚docker到底是什么,以及为什么人们对docker如此亢奋。
docker是一个工具,可以更容易为任何应用封装一个分配的构件,部署量产化到任何环境当中,简化敏捷开发组织的工作流及响应。
虽然docker表面上看起来像是虚拟化平台,但是Docker远不止如此。Docker可以跨越几个细分的行业技术领域像KVM,Xen, OpenStack,Mesos,Capistrano,Fabric,Ansible,Chef,Puppet,SaltStack等等。可能你已经发现,我们很难界定Docker到底是和上述这些技术领域的哪一个在竞争。例如大部分的工程师不会说,虚拟化产品和配置管理工具存在竞争,然而这两者都被Docker技术所冲击。上面所列举的技术因他们能提高生产能力而广受好评,但这也引起了一片轰鸣。Docker正好围绕在过去十年里最有利的技术之中。
如果你要按照功能对功能的方式拿Docker和这些领域中的卫冕技术做比较,Docker可能更像是中等竞争力的对手。在某些方面它比其它的技术强,但是Docker所带来的是跨越广泛的工作流的功能集挑战。通过结合像Capistrano和Fabric的应用部署工具,以及简单的虚拟化系统管理,进而提供hook来使工作流自动化及编排容易实现,Docker提供了一个非常有用的功能集。
很多新兴技术来来去去,关于新技术变革持怀疑态度也是很正常的事。如果不深挖,很容易把docker误以为仅仅是一种新技术来为开发者以及运营团队解决某些特定的难题。如果你认为docker单纯是一种虚拟化或者是部署技术的话,那么docker可能不会太引人注目,但是docker远远不止如此。
通常很难在团队以及更小的组织间进行交流和处理事务,然而我们的世界越来越需要团队间成功的进行细节的沟通。一个工具能做到减少团队间的沟通复杂性,而且能够有助于生产更加健壮的软件将会是非常巨大的成功。而这正是为什么Docker值得深入研究的原因。Docker并不是万能的,实践Docker需要一些想法, Docker是一个很好的方法来解决一些现实世界的组织性问题,而且能够帮助企业更好的实现快速软件交付。推行一个精心设计的Docker工作流会使得技术团队幸福感倍增,而且会使得花费的钱达到组织的底线。
那么什么让公司感到最头痛呢?当今,团队很难做到在预期速度上交付软件,而且随着开发人员从一个或者两个增长到具有很多开发者的团队,沟通负担以及交付新发布的压力将会越来越重,越来越难控制。开发者团队要懂得软件运行到环境中的复杂性,产品运营团队需要不断的提升对于软件内部的掌控。有很多好的技术需要下功夫学习,因为这样可以使他们更好的整体理解开发环境以开发出更加健壮的软件,但是同样是这些技术很难有效的拓展组织的成长快速性。
每个公司的环境细节往往需要大量的交流,这价值并不涉及他们自身所在的团队。比如,需求开发人员询问运营团队,1.2.1版本的某个特定的库使得他们慢下来了,并没有为公司提供直接的商业价值。如果开发人员简单的升级下库的版本,然后编写代码测试新版本,进而推行,这将使得交付时间缩短的非常可观。如果运维人员想要在主机上升级软件而不需要和多重的应用开发人员合作的话,那么进程会很快。Docker帮助构建了软件隔离层,减少了团队人员之间的沟通压力。
Docker除了在帮助人员沟通方面以外,还在软件架构方面特立独行的鼓舞了更加稳健的应用开发。它的架构原理围绕着原子性或者一次性容器。在开发当中,整个旧的应用所依托的环境都将随着容器丢掉。应用所在的环境与应用自己的生存时间一样长,就是这个简单的想法造成了巨大的反响。这意味着应用程序不会依赖于之前版本的东西。同时短暂的调试变化也不会影响到在将来的版本中从本地文件系统找到他们。这就意味着应用在服务器之间是高度可移植的,因为所有的状态都将包括在部署构件,并且是不可变的,或者发送到如数据库,缓存或文件服务器的外部依赖。
这就使得应用不仅增加了可扩展性,而且变得也更加的可靠。应用程序容器的实例可以随着前端配置运行时间的小反应来来回回。这些架构选择已经在非Docker应用中证实是成功的,但在这些设计模式选择包括Docker自己的设计模式也将遵行Docker化应用,这个非常好的事情。
很难将Docker所带来的影响统一的用一种特质来说。当使用Docker执行好时,它对组织,团队,开发者以及运维人员有多层次的好处。Docker使得架构设计简单化,因为所有的应用都将一致的从外部来透视主机系统。这使得工具更容易编写和在应用间共享。世界上没有任何东西只有益处没有挑战,但是Docker更向着益处的这边倾斜。下面我们介绍Docker带来的益处:
当Docker首次被发布时,Linux容器已经存在几年了,而且很多其他技术已经被构建很久了。然后Docker独特健壮的架构以及工作流选择结合到一起,比之前他们的总和还要更有力量。Docker使得
Linux容器这个已经存在十来年的技术友好的呈现在每一位技术家面前。Docker使得容器技术相对容易进入现有的工作流以及现在公司的进程当中。上述的问题探讨我们感受到,人们对于Docker的兴趣已经加速任何人之前的预期。在第一年里,新来接触Docker的人惊讶的发现,虽然Docker并没有正式的生产就绪,但是在开源社区已经有稳健的提交源源不断,促使这个项目迈着轻快的步伐前进。Docker现在已经进入了1.x版本圈,稳定性非常好,生产中已经得到了应用,很多公司正在探寻Docker来解决自身在应用交付进程当中的一些复杂性问题。
Docker在解决问题上广度是其他工具无法比拟的,但是在深度方面Docker缺乏在某些特定类型上的深度。例如,一些组织发现当他们转移到Docker上时可以完全的移除配置管理工具,但是Docker真正厉害之处是它能代替某些方面的传统工具,它也可以兼容这些工具甚至结合以使其增强。接下俩我们介绍一些类型的工具,Docker不直接替换而是与其结合来获得更好的结果:
在没有固定参考框架时,让Docker缠绕着你的头有一定的挑战。在下一章中,我们将放下广泛的概述Docker,它是什么,打算怎样来用它,充分的考虑所有的这些会带来什么好处。
原文链接: What is Docker? (翻译:edge_dawn)