欢迎来到后硬件时代。在这个时代我们把容器或者是虚拟机迁移到我们需要的地方,而不需要考虑容器或者虚拟机。这里我们介绍一些新的Docker工具来做这份工

构建下一代应用是一回事,管理和运行它们是另一回事。

也许理解上面那句话的最好方式是通过一个老的类比:宠物 vs 奶牛。人们采用特别的方

法使宠物存活并保持健康,管理员们用同样的方式来小心照料高端服务器以及它附带的

一切冗余事物。但是在农场里,一头死去的奶牛依然是做生意成本的一部分。可是在今天云

的世界里,应用的设计允许出现失败,一台服务器挂了也没什么大不了的。

现代应用编排工具的角色是监测成群的虚拟服务器或容器并且确保它们在正确的农场漫步(译者注:这里作者把容器和虚机类比奶牛,它们在农场漫步指虚机和容器能够在基础设施上正确有效地运行)。如果一个主机死掉了,一个新的虚拟机甚至新的容器会被快速地实例化出来。实例化过程中根本就没有管理员的干预,因为整个过程是自动的。你也不需要精确地知道哪一台主机或者容器或者它们的组合在运行你的应用程序。人们梦想实现IT自动化已经很久了。终于,今天的一些工具开始兑现这个承诺。如果你正在使用云级别的应用,尤其是需要扩展微服务应用,那么这样的工具对你很重要。

一个为数据中心准备的系统

在下面的场景中,数据中心操作系统的想法正逐步实现:除了作为计算,存储,网络的元素

之外,单个服务器不那么重要。应用被绑定到虚拟机或者容器并且成为主要的管理元素。

与管理单个服务器相反,我们要管理一整个数据中心:划分数据中心来支持不同的应用程

序,构建不需要知道底层硬件任何信息的开发\测试\部署环境。它标识一个新时代的开始,

那些为特定工作负载配置硬件已经是过去的事情了。

一个关键概念是编排:它指动态放置应用程序和服务,以充分利用现有计算资源。编排是分

布式,自动化计算的重要工具。它通过应用的定义和程序集来决定主机的放置和工作负载,

管理扩展以及确保失败的主机和服务被正确处理。

虽然Google的Kubernetes和Apache的Mesos项目或许是最著名的编排解决方案,但是

它们距离最终的解决方案相差还很远。它们都是复杂的工具,需要在技能和资源上投入很

多。它们是最好的应用大规模部署场景的工具。

另外,小部分企业已经迁移到提供编排服务的私有云上,如Microsoft,OpenStack或

VMware提供的私有云服务。但是,绝大多数组织依然在实验交付下一代应用程序的过程

和所需要的工具。

用Docker放牧“奶牛”

我们需要一系列工具,它们能实现从一或两台主机扩展到一或两架主机再到整个数据中

心。Docker采用的方法是他们正在使用的一系列实现容器自动化的工具:Machine,Swarm和Compose。

Machine是Docker自动化工具的心脏,因为它使建立,配置主机服务器的过程自动化。它通过使用Docker的API为你提供单独的命令来建立主机服务器,配置底层Docker引擎并且

设置客户端工具。它还能够附加一个主机到已存在的Swarm集群或者从原型创建一个新

的集群。除此之外,你可以在不同的云供应商上使用容器以及在你选择的云环境上用命令

行设置主机。

一旦你实现了自动创建容器主机和启动Docker引擎,你可以使用Swarm,一款Docker集

群管理工具,把这些主机集中到一个计算组织中。Swarm,使用相同的API作为标准Docker

引擎实例,被设计用来提供容器可扩展的环境。如果你已经在你的DEVOPS环境中运行

Docker, 你可以通过安装Swarm实现迅速扩展, 并继续使用现有DEVOPS工具和流程。Swarm有一个内置的调度器分配容器到单个Docker引擎节点,它还支持使用不同的策

略来优化部署。

创建一个Swarm就像给现有集群增加一个引擎一样容易。你可以使用Machine自动创建

新的引擎或者使用Docker的API获得现有节点的索引。一个选择是使用Docker Hub

registry来简化服务发现,就像Swarm标识和管理已注册的主机一样。Compose是一款更加复杂的工具。它使用YAML构建应用程序的描述,向我们展示一个应用程序中的多个容器是如何相互连接的。YAML有很重要的意义,因为它详细描述了你的引用程序,查阅YAML就像访问像Swagger上的API一样详细(译者注:Swagger是一款全球著名的API管理框架)。一旦你创建了应用程序的描述信息和它的构建方式,剩下的只需要一行脚本命令就能启动应用了。

保持简单

或许Docker编排工具最有趣的方面是它的简单。这三款工具(Machine,Swarm,Compose)

都采用简单的命令,所以它将Jenkins或者Puppet和Chef这些环境管理工具脚本化不再复杂。因为这三款工具是在现有Docker API上构建的,所以他们让分布式环境的管理和控制更容易,它们让开发环境到生产环境的迁移大大简化。Docker的一些工具很适合作为数据中心的管理工具,就像Kubernetes。这些工具也很适合与公有云提供的工具协同工作。当你的应用程序从单服务器的开发测试环境扩展到运行在Azure或AWS的全面云服务上时,将Machine,Swarm和Compose组合使用,你能够更好地管理这些应用。即使应用程序在云规模的Mesos上运行,开发者们也不需要知道它们将容器交付到哪里,因为应用在被Swarm配置后看起来像一个Swarm脚本。这种抽象就是云计算相关的。