Docker 生态系统:常见组件介绍

介绍

集装箱化是通过将组件包装和它们的依赖性实现到被称为集装箱的标准化、孤立、轻量级的流程环境中来实现应用程序的分布和部署的过程,许多组织现在都对可以轻松部署到分布式系统的应用程序和服务的设计感兴趣,使系统能够轻松扩展并生存于机器和应用程序的故障。Docker是一个旨在简化和标准化在各种环境中的部署而开发的集装箱化平台,在推动这种服务设计和管理风格的采用方面发挥了很大作用。

Docker 和集装箱

Docker 是目前使用的最常见的集装箱化软件,而其他集装箱化系统仍然存在,但 Docker 使集装箱创建和管理变得简单,并与许多开源项目集成。

Docker containerization

在此图像中,您可以开始看到(在简化视图中)集装箱如何与主机系统相关。集装箱隔离单个应用程序并使用由Docker抽象的操作系统资源。

Docker 的主要优点是:

  • 轻量化资源利用:而不是虚拟化整个操作系统,集装箱在流程级别上分离并使用主机内核
  • 可移植性:集装箱应用程序的所有依赖性都包装在容器内部,允许它在任何 Docker 主机上运行
  • 可预测性:主机不关心在容器内部运行什么,容器也不关心它在哪个主机上运行。

通常,在设计应用程序或服务以使用 Docker 时,将功能分解为单个容器是最有效的,这是一种被称为服务导向架构的设计决定。

要了解更多关于用 Docker 容器化应用程序的信息,请点击 这里

服务发现和全球配置商店

服务发现是整体战略的一部分,旨在使集装箱部署可扩展和灵活。服务发现被用来使集装箱能够在没有管理员干预的情况下了解所引入的环境。他们可以找到必须交互的组件的连接信息,并可以注册自己,以便其他工具知道它们可用。

Docker service discovery

在上面的图像中,您可以看到一个示例流,其中一个应用程序记录了其与发现服务系统的连接信息.一旦注册,其他应用程序可以查询发现服务,以了解如何连接到应用程序。

这些工具通常被实施为简单的关键值存储,在集群环境中分布在主机之间。一般来说,关键值存储提供访问和设置值的HTTP API。有些包括额外的安全措施,如加密条目或访问控制机制。

服务发现商店的一些责任是:

允许应用程序获取连接所需的服务所需的数据 *允许服务为上述目的注册其连接信息 *提供一个全球可访问的位置来存储任意配置数据 *根据任何集群管理软件所需,存储集群成员的信息

一些流行的服务发现工具和相关项目包括:

  • etcd:服务发现 / 全球分布式关键价值存储
  • consul:服务发现 / 全球分布式关键价值存储
  • zookeeper:服务发现 / 全球分布式关键价值存储
  • crypt:项目加密等内容
  • confd:显示关键价值存储的变化和触发服务重新配置与新值

若要了解更多关于 Docker 服务发现的信息,请访问我们的指南 这里

网络工具

集装箱应用程序以服务为导向的设计,鼓励将功能分解为分离的组件,虽然这使得管理和扩展更容易,但它需要在组件之间的网络功能和可靠性方面得到更大的保证。

Docker 的原生网络功能为连接容器提供了两种机制。第一个是暴露容器的端口,并可选地图到主机系统进行外部路由。您可以选择主机端口进行地图,或者允许 Docker 随机选择一个高,未使用的端口。

另一种方法是允许容器通过使用Docker的链接进行通信。链接的容器将获得其对应的连接信息,允许它自动连接,如果配置为关注这些变量,则允许在同一主机上的容器之间进行接触,而无需事先知道服务所在的端口或地址。

这种基本的网络级别适用于单主机或密切管理的环境,但Docker生态系统已经产生了各种项目,专注于扩大运营商和开发人员可用的网络功能。

  • 覆盖网络以简化和统一多个主机的地址空间
  • 虚拟私人网络,用于提供各种组件之间的安全通信
  • 每个主机或每个应用程序分配子网
  • 建立通信的 macvlan 接口
  • 配置您的集装箱的自定义 MAC 地址、网关等

一些涉及改善Docker网络的项目包括:

  • flannel:覆盖网络为每个主机提供一个单独的子网
  • weave:覆盖网络描绘单个网络上的所有容器
  • pipework:用于任意先进的网络配置的先进网络工具包

若要深入了解使用 Docker 建立网络的不同方法,请点击 这里

规划,集群管理和管弦乐队

构建集群容器环境时需要的另一个组件是计时器. 计时器负责在可用的主机上启动容器。

Schedule applications

上面的图像显示了一个简化的计划决策,请求是通过API或管理工具提供的,从这里开始,计划员评估了请求的条件和可用的主机的状态,在这个例子中,它从分布式数据存储 / 发现服务中提取了集装箱密度的信息(如上所述),以便它可以将新应用程序放置在最不忙的主机上。

这个主机选择过程是计划员的核心责任之一. 通常,它有自动化这个过程的功能,管理员可以选择指定某些限制。

  • 将容器安排在与另一个特定容器相同的主机上
  • 确保容器不与另一个特定容器相同的主机上
  • 将容器放置在具有匹配标签或元数据的主机上
  • 将容器放置在最不繁忙的主机上
  • 在集群中的每个主机上运行容器

计划员负责将容器加载到相关主机,并启动、停止和管理过程的生命周期。

由于日程安排器必须与组中的每个主机进行交互,因此通常还包括集群管理功能,这些功能允许日程安排器获取有关成员的信息并执行管理任务。

一些作为时间表和车队管理工具的流行的项目包括:

  • fleet:计时器和集群管理工具
  • marathon:计时器和服务管理工具
  • Swarm:计时器和服务管理工具
  • mesos:为计时器整合主机资源的主机抽象服务
  • kubernetes:能够管理集装箱组的先进计时器
  • 构成:创建集装箱组的集装箱组织工具

若要了解有关 Docker 的基本规划、集装箱组合和集群管理软件的更多信息,请点击 在这里

结论

到目前为止,您应该熟悉与Docker生态系统相关的大多数软件的通用功能。Docker本身,以及所有支持项目,提供一个软件管理,设计和部署策略,使大规模可扩展性。

Published At
Categories with 技术
comments powered by Disqus