转载

Docker是什么

【编者的话】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远不止如此。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带来的益处:

  • 将开发人员已经有的技术打包成软件
    很多公司不得不创建版本,并且构建的工程师需要构建软件包来管理所有的工具的使用方法。像 rpm,mock,dpkg,和pbuilder这样的工具使用比较复杂,每一个都需要单独的学习。 Docker将你需要的所有东西打包定义成一个文件。
  • 通过一个标准的镜像格式捆绑应用软件和需要的OS系统文件
    在过去,通常你不仅需要打包你的应用,而且还需要将依赖的库和守护进程打包。然后你不能够确保执行环境可以百分之百的一致。这些情况就导致了打包难掌握,而且对于很多公司很难可靠的完成。经常有人运行科学的Linux试图配置一个在红帽Linux上测试过的社区包,希望这个包会尽量的满足他们的需要。利用Docker你就可以配置你的应用所需要的任何一个单一的文件。Docker的分层镜像使得这是一个有效的方法来确保你的应用将会跑在期望的环境当中。
  • 利用打包的构件来测试和交付,并且在所有的系统中提供完全一致的构件
    当开发者更改提交到版本控制系统,新的Docker镜像就构建出了,这个奖项可以通过所有的测试进程以及配置到生产当中,而不需要重新编译或重新打包在此过程中。
  • 从硬件中抽象软件应用而不需要牺牲资源
    传统的企业虚拟化解决方案比如VMware,在人们需要在硬件和软件应用之间创建一个抽象层的时候经常被使用,代价就是消耗资源。虚拟机管理程序在管理虚拟机和每一个虚拟机跑的内核的时候都消耗了一定百分比的硬件资源,这些资源就不能被宿主机应用所用了。而对于容器而言,仅仅是另外一个进程对Linux内核的对话,因此可以利用所有的资源直到系统以及配置的资源受限。

当Docker首次被发布时,Linux容器已经存在几年了,而且很多其他技术已经被构建很久了。然后Docker独特健壮的架构以及工作流选择结合到一起,比之前他们的总和还要更有力量。Docker使得

Linux容器这个已经存在十来年的技术友好的呈现在每一位技术家面前。Docker使得容器技术相对容易进入现有的工作流以及现在公司的进程当中。上述的问题探讨我们感受到,人们对于Docker的兴趣已经加速任何人之前的预期。在第一年里,新来接触Docker的人惊讶的发现,虽然Docker并没有正式的生产就绪,但是在开源社区已经有稳健的提交源源不断,促使这个项目迈着轻快的步伐前进。Docker现在已经进入了1.x版本圈,稳定性非常好,生产中已经得到了应用,很多公司正在探寻Docker来解决自身在应用交付进程当中的一些复杂性问题。

Docker不是什么

Docker在解决问题上广度是其他工具无法比拟的,但是在深度方面Docker缺乏在某些特定类型上的深度。例如,一些组织发现当他们转移到Docker上时可以完全的移除配置管理工具,但是Docker真正厉害之处是它能代替某些方面的传统工具,它也可以兼容这些工具甚至结合以使其增强。接下俩我们介绍一些类型的工具,Docker不直接替换而是与其结合来获得更好的结果:

  • 企业虚拟平台(VMware,KVM,等)
    按传统概念来看容器并不是虚拟机,虚拟机包含一个完整的操作系统运行在宿主机操作系统之上。最大的优点是可以轻松的在一个宿主机上跑很多的配有不同操作系统的虚拟机。结合容器,宿主机和容器共享相同的内核。这就意味着容器很少利用系统资源,但是一定要基于同一个底层的操作系统(例如都是Linux)。
  • 云平台(Openstack,CloudStack,等)
    像企业虚拟化,容器工作流和云平台存在很多相似之处。两者在传统上都运行应用根据需求进行水平缩放。但是Docker并不是云平台,它仅仅是掌管配置,运行,和管理容器在原来存在的Docker主机上。它并不允许创建新的宿主系统(实例),对象存储,块存储,以及很多很云平台相联系的资源。
  • 配置管理(Puppet,Chef,等)
    虽然Docker可以显著提高组织管理应用和应用依赖的能力,但是它并不能直接替代传统的配置管理。Dockerfiles用来定义一个容器在构建时的状态,但是并不能管理容器正在进行的状态,也不能用来管理Docker的主机系统。
  • 部署框架(Capistrano,Fabric,等)
    Docker创建一个独立封装了应用所需的依赖的容器镜像,而且可以部署到任何环境中不需要做任何改变,使得docker在部署发方面比较方便。然后Docker不能单独用作自动化部署复杂进程。其它的一些工具也是需要结合起来使得工作流自动化更加的健全。
  • 工作负载管理工具(Mesos,Fleet,等)
    Docker服务器没有集群的内部概念。需要附加的编排工具来智能的协调Docker主机池工作,跟踪所有主机及其资源的当前状态,并保存当前容器运行情况清单。
  • 开发环境(Vagrant,等)
    Vagrant是一个虚拟机管理工具,开发者可以用来模拟服务器栈,类似应用注定被部署的生产环境。另外Vagrant可以很容易的在Mac OS X和基于Windows的工作站上运行Linux软件。由于Docker服务器只能运行在Linux上,Docker提供了一个叫做Boot2Docker的工具,来允许开发者在不同的平台上快速的推行基于Linux的Docker机器,但是该工具并没有提供出Docker和Vagarant在广度方面的特性。

在没有固定参考框架时,让Docker缠绕着你的头有一定的挑战。在下一章中,我们将放下广泛的概述Docker,它是什么,打算怎样来用它,充分的考虑所有的这些会带来什么好处。

原文链接: What is Docker? (翻译:edge_dawn)

原文  http://dockone.io/article/1534
正文到此结束
Loading...