赞!Docker生态系统常用组件介绍 开启快乐开发之旅

时间:15-02-16 栏目:云计算技术 作者:爱说云网 评论:0 点击: 2,155 次

Docker已经为开发者和管理员提供一个简单的平台来创建和部署可扩展的应用。本篇文章是介绍Docker生态系统的系列文章的第一篇在这个系列中,作者将探索Docker如何与其他组件整合在一起,并用它们提供的工具集来便捷地提供高可用性的分布式系统。本篇文章不仅从概念上介绍了容器化、服务发现和全局配置存储、网络工具、调度、集群管理和编制这几部分内容,而且配以清晰易懂的例子进行讲解说明,非常赞。

简介

容器化是一个以可移植和可预测的方式来部署分布式应用的过程,它会将应用组件以及依赖打包为一个标准、独立、轻量的环境中,这个环境其实就是容器。现在许多公司都乐衷于设计易于部署的分布式应用和服务,这样的应用容易扩展,并且容错性好。Docker是一个可以简化和标准化不同环境中应用部署的容器平台,目前已经有很多的分布式容器管理相关的生态圈软件。

Docker和容器化

Docker是现在使用最多的容器化软件。与其它已经存在的容器化系统相比,Docker可以更加简单的创建和管理容器,并与其它开源软件集成。

在上图中,你可以看到容器和宿主机的关系,容器隔离独立的应用并使用已经被Docker抽象化的操作系统资源。在右侧的视图中,我们可以看到容器是用‘layer’来建立的,多个容器共享基础层以减少资源的使用。

Docker的主要优点:

轻量级资源使用:容器在进程级别隔离并使用宿主机的内核,而不需要虚拟化整个操作系统。
可移植性:一个容器应用所需要的依赖都在容器中,这就让它可以在任意一台Docker主机上运行。
可预测性:宿主机不需要关心容器内运行的是什么,同样,容器也不需要关心是在哪个宿主机上运行。所需要的接口都是标准化的,并且交互也都是可预测的。
通常在用Docker来设计应用或者服务时,最好的方法是打破面向服务架构的设计,而采用独立容器的设计。这可以让以后容易的扩展或者升级独立组件。拥有如此的灵活性是人们对用Docker开发和部署感兴趣的原因之一。

服务发现和全局配置存储

服务发现是整个策略中的一个组成部分,它旨在使容器部署更具有伸缩性和灵活性。使用了服务发现后,可以让容器在没有管理员干预的情况下了解运行环境。它们可以自行发现必须要交互的组件的连接信息,可以自行注册自身以便其它工具知道该组件已准备就绪。这些工具同样经常作为全局分布式配置存储服务,可以存储你的基础设施中任意的服务配置信息。

从上图中,你可以看到一个流程,图中应用A注册自身的连接信息给发现服务系统。一旦注册成功,其它应用可以通过查询发现服务系统来找到如何连接到这个应用。

这类工具通常这么实现:在分布式环境中用基本的键值对来分布存储。通常来说,键值对存储提供一个HTTP API接口用来存储和获取值。有一些还提供了更加安全的机制,如加密条目或者访问控制机制。除了它们的提供新容器自配置的主要功能外,这些分布式存储对管理Docker宿主机也是非常重要的。

服务发现存储的一些职责:

允许应用连接它们所依赖的服务以获取所需数据
允许服务为了上述的需求去注册它们的连接信息
提供一个全局可访问的位置,用于存储任意的配置数据
存储任何一个集群管理软件所需要的集群节点信息
一些流行的服务发现工具和相关项目:

etcd:服务发现/全局分布式键值对存储
consul:服务发现/全局分布式键值对存储
zookeeper:服务发现/全局分布式键值对存储
crypt:加密etcd条目的项目
confd:观测键值对存储变更和新值的触发器重新配置服务
网络工具

应用的容器化倡导面向服务的设计,并提倡将功能点设计为离散的组件,以简化应用的扩展和管理。但是,这也对组件间的网络功能和可靠提出了更高要求。Docker自身提供基本的网络结构,包括容器间和容器与宿主直接的通信结构。

Docker本地的网络能力为容器间的连接提供两种方案。第一种是暴露一个容器的端口,并可选择性的映射到宿主机上并为外部路由服务。可以自己决定使用宿主机的端口来映射,也可以让Docker随机的选择一个未使用的高位端口号。这是一种对大多数场景友好的方式来提供对容器的访问。

另外一种方法是采用Docker的'links'来允许容器间通信。一个关联的容器将会获得它的对应连接信息,在它处理了那些变量后允许它自动连接。这样就使得同一个宿主机上的容器不需要知道对应服务的端口和地址,就可以直接进行通信。

这个基本的网络环境适用于单宿主机或者严格受限的环境。但是,Docker生态环境已经产生了大量软件,它们关注在为运营人员和开发者扩展网络功能。一些额外的网络功能已经可通过额外工具实现:

覆盖网络来简化和统一多宿主机间的地址空间
虚拟私有网络适配来提供多个组件间的安全通信
分配子网给每个宿主机或者每个应用
简历macvlan接口进行通信
为容器配置自己指定的mac地址、网关等。
参与改进Docker网络功能的项目有:

flannel:覆盖网络提供给每个宿主机一个独立子网
weave:覆盖网络描述一个网络上的所有容器
pipework:一个高级网络工具,它用于任意高级网络配置
调度、集群管理和编制

建立一个集群容器环境时另外一个必备组件是调度器。调度器负责在可用的宿主机上启动容器。

上图描述了一个简单的调度决策。请求来自API或者管理工具。然后,调度器衡量请求的条件和可用的宿主机的状态。在这个例子中,它从一个分布式数据存储/发现服务中获取容器密度的信息,以便它可以在一个不是很忙的宿主机上运行新应用。

这个宿主机选择的过程是调度器的一个核心任务。通常来说,它能够按照管理员预设定的特殊条件限制来自动化完成这个过程。可能的限制条件是:

当给定另一个容器时,安排新容器在同一个宿主机
确认这个容器不放在同一台宿主机上作为另一个容器
在宿主机上安置容器时记得带相匹配的标签或者元信息
在繁忙度最低的宿主机上安置容器
在集群的每一个宿主机上运行这个容器
调度器责任是在相关的宿主机上加载容器,启动容器、停止容器和管理这个进程的生命周期。

由于调度器必须要跟组内的每一个宿主机交互,集群管理功能通常也是包括在内的。这就要求调度器获取它们的信息并执行管理任务。编制在这里通常指的是容器的组合调度和宿主机管理。

一些流行的负责调度和集群管理的工具:

fleet: 调度器和集群管理工具
marathon:调度器和集群管理工具
Swarm:调度器和集群管理工具
mesos:宿主机抽象服务,用于为调度器联合宿主机资源
kubernetes:一个管理容器组的工具,具有先进的调度能力
compose:一个用于创建容器组的容器编制工具
想找更多关于Docker的基本调度管理、容器组、集群管理软件,请点击这里。

结束语

现在,你应该已经熟悉与Docker生态环境相关的软件的基本功能。在支持项目的帮助下,Docker提供一个能够大规模扩展的软件管理、设计、部署策略。通过理解和使用这些项目的功能,你能解决一个要求能够足够灵活的解释变量操作的复杂应用部署需求。

相关文章

基于Docker的B2B服务思考:Docker到底解决了什么问题...
views 1594
我很喜欢Docker,它容易使用并且速度快,它真的很棒,以至于我每天都能看到与它有关的应用。但是话又说回来,Docker究竟解决了什么实际问题?稳定的环境?配置管理?高性价比的虚拟化? 我认为Docker解决了其它的问题。 我之前公司的主营业务是为客户提供B2B( business-to-busi...
云计算之Docker:颠覆者还是昙花一现
views 1447
在云计算产业界,一场由一个技术掀起的革命正在悄悄上演:名不见经传的小公司横插进IT大佬构筑的云生态产业链,各路IT企业纷纷拥抱该技术并接纳该公司,云计算的构建方式和实施方式也即将发生或多或少的改变。这个技术就是Docker,这个公司便是dotCloud。 DotCloud本是家新创业小公司,基本无...
在Docker容器之间拷贝数据:原理与操作示例...
views 1392
ocker容器可以类比成一个目录,它可以将一个应用程序运行时所依赖的所有环境(注:此应用依赖的其他的服务或程序等)打包在一起运行;同时可 以随意的对它进行“启动”、“停止”、“移动”或者“删除”等操作。Docker容器在Linux的命名空间(Namespace)机制下被激活,这样就 可以使得运行在同...
Docker入门教程:15个Docker进阶命令
views 2294
在之前的文章中,我们介绍了15个Docker命令,并分享了它们的使用经验。在这篇文章中,我们将学习另外的15个Docker命令。它们分别是: daemon: Docker daemon是一个用于管理容器的后台进程。一般情况下,守护进程是一个长期运行的用来处理请求的进程服务。-d参数用于运行后台进程。...
Docker 传奇之 dotCloud
views 1098
2010年,几个大胡子年轻人在旧金山成立了一家做 PaaS 平台的公司,起名为「dotCloud」,这个名字让我想起了微软的「DotNet」。 dotCloud 主要是基于 PaaS 平台为开发者或开发商提供技术服务。什么是 PaaS 呢?PaaS 的全称是 Platform as ...
改善 Docker 镜像系统安全性的补救措施
views 1611
最近在使用Docker下载一个“官方”容器镜像时我看到这么一行提示:   ubuntu:14.04: The image you are pulling has been verified 我当时以为这和Docker极力推荐的镜像签名系统有关,所以并未深究。后来,在研究Docker镜...
专访Docker中文社区创始人马全一: Docker正走在成为领域标准的路上 – 51C...
views 1561
凭借其方便的可移植性和开源 Linux 容器引擎,Docker在云计算领域的人气飙升。其实使用 Linux 容器技术并不是什么新鲜事,国内的各大互联网公司内部都有基于 Linux 容器引擎的平台在为业务部门提供服务。一个开源的项目能否在商业上取得成功,很大程度上依赖三件事 —— 成功的 User C...
容器领域趋势分析:多点开花,Docker不再一家独大...
views 1273
就在去年的10月份,大家似乎都钟爱Docker。你要是以为Docker就是容器领域的唯一玩家,那也情有可原。 Docker本身其实只是在2014年下半年才备受关注,Docker 1.0在之前的6月份首次亮相。但在6月份到10月份这短短几个月的时间里,Docker人气一路飙升,红帽在新的RHEL 7...

声明: 本文由( 爱说云网 )原创编译,转载请保留链接: 赞!Docker生态系统常用组件介绍 开启快乐开发之旅

赞!Docker生态系统常用组件介绍 开启快乐开发之旅:等您坐沙发呢!

发表评论


读者排行