Libcompose 与畅游 Docker Compose

来源:互联网 发布:自助餐收银软件 编辑:程序博客网 时间:2024/05/06 03:51

翻译自 Darren Shepherd 2015年8月6日
原文请点击英文原文

      
这是一个我们在Docker方向工作了有一段时间的项目,并且我很高兴Docker决定采用我们开发的出发点是下一代Docker Compose的代码。
我们曾在一段时间是Compose组件的忠实粉丝,即使起初还叫做Fig组件,并且我们认为对于容器长期采用该组件是至关重要的。今天我想讲讲这对libcompose的影响和我们是如何参与该项目的。
      

Introducing libcompose: 官方正式实行Docker-Compose组件的多容器化文件格式。 https://t.co/gY1oAJIljm(Twitter声明)
— Solomon Hykes (@solomonstre) August 5, 2015

为什么libcompose如此重要?
Libcompose 满足很多项目都会存在的直接需求,他们支持Docker Compose在内的应用,比如IDE或者GUI应用、部署工具和编排框架。
通过一个可用的库,它将Docker Compose集成为更富有更强大的组件变为可能。libcompose其他方面的主要影响是它允许我们创建一个可插入框架来满足日益增长的开发和部署更大规模应用程序的需求。Docker Compose是集中将小的部分组合成更大的应用。目前它主要方向集中在容器上,但是很快它将满足管理卷、网络、服务发现、虚机等功能的需求。通过创建一个可插入框架,我们不仅可以管理Docker项目实体,其他架构可能存在的服务也一样可以管理。


Docker Compose组件在RancherOS系统中的应用
我们最初是在RancherOS系统中用到了Docker Compose组件。RancherOS是我们的精简linux,分布在整个操作系统上并运行Docker容器。当我们第一次发布RancherOS时,我们实际上是用GO语言硬编码在代码中,使容器被用在提供核心系统服务(udev、DHCP、syslog等)。很明显我们希望将它可配置,所以我们开始考虑怎样才是最好的方式去配置RancherOS。我突然想到了Docker Compose,它最初被设计去解决如何用多个容器组成一个应用,也能被用来解决如何用多个系统服务组成一个操作系统。因此,Docker Compose 成为RancherOS的配置机制。此外,RancherOS小于25MB。我们很有空间意识并且这让我们在Docker Compose上遇到的很大的技术挑战。RancherOS是用GO语言编写而Docker Compose是用python语言编写的。为了运行Docker Compose,我们需要在系统中加入python运行环境,为此在构建时增加了8M。那时我们决定最好用GO语言重新实现Docker Compose — 至少需要实现一部分。


Docker Compose组件在Rancher中的应用

在Rancher方面,我们致力于支持原生的Docker体验,以便devops团队在迁移容器从开发环境到测试环境再到生产环境时能同样的使用原生的Docker。我们支持用户使用Docker和Rancher两种命令操作方式。第一种方式通过“docker run”命令,而第二种方式通过Docker Compose。在Docker 1.5版本中,随着其他贡献者的帮助,我们加入了支持Docker的标签功能。这个方法允许用户对容器加入标签来标示他们想在容器中添加的服务。通过Rancher的被动编排,我们增强了容器“docker run”启动。我们几周前发布的博客是个很棒的例子“docker run”命令在Rancher SDN中的使用。以下是docker-compose与rancher-compose的yml文件对比:
docker-compose与rancher-compose的yml文件对比
Docker Compose是我们用来描述多容器应用部署的语言。在Rancher,我们专攻为容器提供便携的基础设施服务,比如服务的发现、健康检查、负载均衡、 SSL termination、SDN等等。我们希望尊重原生Docker Compose格式并且找到一种既能描述又能管理这些额外服务的格式。我们在RancherOS中已经用纯Go语言实现了Docker Compose,所以我们决定继续用那些基础代码去尝试添加插件或者可扩展到Docker Compose的想法。看起来好像是个巨大的任务,但最终它是非常可行的。首先,Python实现很好写,但用Go语言更容易理解并且端口逻辑清晰。困难的是复杂的Docker API和解析逻辑相关的部分。用Go语言来做这件事最好的地方在于我们能利用所有被Docker Deamon/Client、Machine、Swarm、Distribution等使用的代码。有大量的代码我们可以导入到其中。(表扬引擎团队在1.7和1.8版本中的出色工作,使得很容易的重新使用系统配置工具包)。最后我们找到了一些方法来描述可伸缩服务、资源管理、服务发现、负载均衡、调度和升级策略等所有使用可插拔库实现的简单的Docker Compose语法。


Libcompose的创建
在由Docker公司举办的2015DockerCon大会上,我们参与分享了用Go语言完美实现Docker Compose。我惊讶的发现Docker公司的大部分团队已经有一些使用用例。他们鼓励我们贡献代码以便更多人可以参与协作。 感谢 Adrian Duermael, Aanand Prasad, Ben Firshman, Gaëtan De Villèle, Sam Alba和我们在Codeship的朋友们,使我们能快速建立起Docker libcompose项目。我们非常高兴能继续在社区工作,看看我们能把Docker Compose用在哪里,就像有些人会在他们的应用中嵌入Docker Compose里。下周我们将会进行八月份的Rancher在线见面会,并且我们将在开始前腾出来10分钟来讨论libcompose和我们已完成的工作。期待你们的加入。
Translated by Nireus

0 0
原创粉丝点击