基于Docker API 构建的工具

Docker 是一个流行的新技术来让开发团队将应用嵌入虚拟化的容器内,以便于构建和部署。我们之前已经看到Docker怎样降低DevOps 工作流的复杂性,并且鼓励保持基础设施的不变性,整个应用与它的基础操作系统一起,作为一个轻量级容器,对应用的每次改变进行重新创建和重新部署,而不是依靠增量更新。

在过去三年Docker 取得了令人瞩目的成功,得益于它的远程API,Docker 成为一个流行的开发者构建各种软件的平台也是必然的。

保持Docker 自己的理念,新生态系统的第三方开发者已经贡献了许多开源项目。在本文中,我们回顾这些项目,看看它们是怎样使用Docker API 的。

内部测试

Docker API最主要的用户是Docker 自己——他们采用有用的结构开发了一系列的工具来联合和编排Docker 容器。Docker Compose 便于多容器应用的部署,而Docker Swarm 允许创建Docker 容器集群。

尽管Docker 自己活跃在这个领域,他们也欢迎其他的参与者在策划Docker 容器上的贡献。策划是一个广义的术语,但是我们能将其拆分为调度、集群、服务发现,和一些其他工作。

通常,为了效率、透明度和避免依赖的紧耦合,不希望多个进程运行在同一个Docker 容器内部。为每个容器保留限制在一个单一的职责,并为基础设施的其余部分提供一个明确定义的服务,这样做更实际。所以一个完整的应用通常需要一批Docker 容器,大量的新解决方案用来解决其带来的复杂性。

调度

Docker 容器的调度也是容器策划的一个重要方面。本文中的调度是指运行在给定主机上的容器的规则。例如,一个调度策略可能需要两个在功能上相互协作的容器运行在相同的主机上。由于这个策略,当定义集群行为时,这两个容器能够被抽象出来作为一个单独的应用。

除了Docker Swarm 的调度功能以外,CoreOS 的Fleet 和Marathon 是开源的Docker 调度器的范例。

另请阅读API 驱动的DevOps:聚焦Docker 来更深入地分析容器架构。

集群管理

集群需要管理一批Docker 主机作为一个整体,这样它们能作为一个单独的系统来一起操作。

有一些Docker Swarm 的开源替代产品,比如Google 的Kubernetes,能够让团队定义Docker 容器的pods。其他的包括 Shipyard、CoreOS 的Fleet 和 Marathon。

比如Spotify 公司已经开发并且开源了他们自己的Docker 容器管理系统,这需要为每个用例很好地适配基于Docker 的系统。

服务发现

服务发现是指在网络上发现与服务相关的IP 地址,在多主机的集群环境中,这是一个很复杂的过程。

有些公司比如GliderLabs 已经利用Docker 的远程API 来监听事件,创建围绕基于容器的软件的工具。Registrator,一个Weave 提供的开源项目,通过检查最新创建的Docker 容器来完善服务发现,并注册新的服务到Consul这样的目录中。

网络

为了连接应用的Docker 容器,Docker 有一些网络功能。虚拟桥接网络是默认启用的,但是有一些配置选项。供应商对于不同的用例提供了不同的可替代的网络配置。

Weave 创建一个微型路由的虚拟网络来连接跨多个主机的容器。这带来了更简单的网络配置,动态添加节点到网络中,以及加密的通信。Weave 还提供额外的服务,比如网络监控产品Weave Scope。

Flannel,一个CoreOS 开源的虚拟网络解决方案,创建一个overlay 网络,并使用Etcd 集群来存储网络配置。

Calico 项目 是另一个用于Docker 容器的开源的网络解决方案,完全基于第三层的方式,这意味着它不是一个overlay 网络,即在OSI 模型的第三层之上没有封装包。相对于其他解决方案,这有助于提高性能。

存储

Docker 调解了不可变基础设施爱好者的一个难题,即数据库。数据库中的数据按照定义是可变的,所以一个数据库容器不能简单地从头开始重新创建和重新部署而不影响数据库的完整性。

这个问题Docker 也有原生的解决方案,即数据卷和数据卷容器 的方式。数据卷是持久化的,在删除它们连接的容器后依然保留,并且它们包含的数据在整个Docker 生命周期中不被损坏。数据卷容器能够被用来跨多个容器共享数据。

数据卷能够备份和恢复,比如ClusterHQ 的Flocker,开源的数据卷管理器,管理数据卷和容器,以及进行数据迁移来支持基于容器的生产数据库。

持续集成

很多持续集成(CI)领域的工具能更好的处理Docker 容器的构建、测试和部署周期。例如,CodeFresh 能够通过检测Git 仓库的更改或者是持续集成服务器的新的构建,用来触发创建和部署Docker 容器。

CodeShip 的 Jet 是一个新的用于Docker 的CI 平台。它能从任意的Docker 仓库中拉取镜像,并且集成Docker Compose 来简化并发构建和部署基于容器的应用。

Drone 是另一个构建于Docker 之上的持续交付平台,在构建过程中使用临时容器。

在激励API 开发的持续集成工具 上阅读全文。

托管Docker 仓库

除了DockerHub 以外,有几家公司提供托管Docker 仓库,比如Quay.io、Artifactory 以及Google 的 Container Registry。这些服务作为容器的私有仓库,提供仓库的高级特性、第三方集成,以及为DevOps 工程师提供不受干扰的用户体验。

日志聚合

Logspout 是GliderLabs 的另一个开源项目。当多个Docker 容器共享一台主机服务器时,Logspout 进行日志路由,将其聚合到一个日志管理系统中,比如PaperTrail。同样,Filebeat 记录容器的日志并发送到Logstash 中。

监控

基于Docker 的应用的第三方监控解决方案有一些可用的选择,由一些云监控领域的大牌公司构建。利用Docker 的统计API,他们在详细的仪表板上显示数据结果。

这些监控解决方案的例子包括:

  • AppDynamics 的Docker 扩展;
  • 启用Docker 的DataDog 代理;
  • New Relic 中一等市民待遇的Docker 容器;
  • 以及Scout 的Docker 代理,它本身作为Docker 镜像发布。

配置管理

Docker 允许你通过标签给镜像、容器和进程增加定制的元数据。标签是键值对,用于指定定制配置,比如版本和具体的环境变量。

为了避免命名冲突,Docker 鼓励在标签中使用命名空间,但是并不强制要求。Docker 标签检查器是由Gareth Rushgrove,Puppet Labs的高级工程师,提供的一个工具,用来检查已经发布的Docker 镜像是否违背这一指南或者是给定的JSON 样式。

安全审计

对容器应用的安全已经有一些疑问,虽然这些年Docker 自己已经封堵了许多漏洞,不过供应商已经提供了一些解决方案来增强Docker 应用的安全性。一个例子是Scalock 公司,开发软件来扫描容器的安全问题,控制容器的访问,并且在运行时监控容器来确保它们没有超过它们的授权设置。

PaaS

大量的基于Docker 的新软件已经引发了如何把这些工具整合在一起的新难题,但是这是一个成熟的生态系统的征兆。少数几家公司野心勃勃地押注在创建一个端到端的像PaaS 这样的解决方案,用来构建、部署、编排和监控基于Docker 的应用,从而隐藏所有的这些复杂性。

Openshift 是RedHat 的PaaS 解决方案,构建在Docker 和Kubernetes 之上。Deis 是Engine Yard 基于Dockerand CoreOS 的Heroku 风格的PaaS 解决方案。Paz 是基于Docker、CoreOS、EtcD 和Fleet 的开源项目,让团队负责他们自己的容器应用的PaaS 工作流。

最后,Docker 不久前已经收购了Tutum ——一个部署和管理Docker 容器的PaaS 套件,并将其改名为Docker Cloud。

成熟的OS

Docker 是如此的流行,以至于有些人已经在尝试创建由Docker 容器组成的完整操作系统。

Rancher 的RancherOS 是一个轻量级的操作系统,完全由Docker 容器组成。它是一个设计用于运行基于容器的应用的Linux 发行版,大小仅20MB。

HypriotOS 是一个用于树莓派的Docker 场景。它允许你在这些微型计算机上部署容器应用,由能够安装在SD 卡上的轻量级镜像组成。

结尾

Docker 的出现赋予了DevOps 软件生态系统的新生。因为基于容器的应用(相对于基于虚拟机)的增长所带来的份额,它在未来将会继续保持增长。

在后面的文章中,我们将探讨DevOps 的其他组成,即持续集成和配置管理,所以关注我们,注册我们的简报来保持更新。

查看英文链接:tools built on top of the docker api

你可能感兴趣的:(基于Docker API 构建的工具)