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

在过去的几年里,一直是容器利益及其相关技术的复兴。具体来说,许多组织正在设计他们的应用程序和服务依赖于分布式系统,可以轻松地扩展和生存的节点...

介绍

容器化是以便携和可预测的方式分发和部署应用程序的过程。 它通过将组件及其依赖包装到标准化,隔离,轻量级的称为容器的进程环境中来实现。 许多组织现在对设计可以轻松部署到分布式系统的应用程序和服务感兴趣,从而允许系统轻松扩展,并在机器和应用程序故障中存活。 Docker是一个用于简化和标准化在各种环境中部署的容器化平台,在促进采用这种服务设计和管理方式方面发挥了重要作用。 已经创建了大量的软件来建立在分布式容器管理的这个生态系统上。

Docker和容器化

Docker是当今最常用的容器化软件。 虽然其他容器化系统存在,Docker使容器创建和管理简单,并与许多开源项目集成。

Docker容器化

在此映像中,您可以开始看到(以简化视图)容器与主机系统的关系。 容器隔离各个应用程序,并使用已被Docker抽象的操作系统资源。 在右侧的分解视图中,我们可以看到容器可以通过“分层”构建,多个容器共享底层,减少了资源使用。

Docker的主要优点是:

  • 轻量级资源利用率 :不是虚拟化整个操作系统,容器隔离在工艺水平和使用主机的内核。
  • 便携性 :所有依赖的一个容器的应用被捆绑的容器内,允许它的Docker主机上运行。
  • 可预测性 :主机并不关心什么容器内运行和容器不关心哪个主机正在运行的。 界面是标准化的,相互作用是可预测的。

通常,当设计一个应用程序或服务以使用Docker时,它最好将功能分解成单独的容器,一种被称为面向服务的体系结构的设计决策。 这使您能够在将来独立地轻松扩展或更新组件。 拥有这种灵活性是人们对Docker开发和部署感兴趣的许多原因之一。

要了解更多关于Docker集装化应用程序,点击这里

服务发现和全局配置存储

服务发现是一个总体战略的一个组成部分,旨在使容器部署可扩展和灵活。 使用服务发现,以便容器可以在没有管理员干预的情况下发现他们已经引入的环境。 他们可以找到他们必须交互的组件的连接信息,并且他们可以注册自己,以便其他工具知道它们可用。 这些工具还通常用作全局分布式配置存储,其中可以为在基础架构中运行的服务设置任意配置设置。

Docker服务发现

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

这些工具通常实现为在集群环境中的主机之间分布的简单键值存储。 通常,键值存储提供用于访问和设置值的HTTP API。 一些包括诸如加密条目或访问控制机制的附加安全措施。 除了为新容器提供自配置详细信息的主要功能之外,分布式存储对于管理群集Docker主机至关重要。

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

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

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

  • ETCD :服务发现/全球分布式key-value存储
  • 领事 :服务发现/全球分布式key-value存储
  • 动物园管理员 :服务发现/全球分布式key-value存储
  • 地穴 :项目加密ETCD项
  • confd :手表key-value存储更改,并触发新的价值服务的重新配置

要了解更多关于Docker服务发现,请访问我们的导游在这里

网络工具

容器化应用程序适用于面向服务的设计,它鼓励将功能分解为离散组件。 虽然这使得管理和扩展更容易,但它需要更多关于组件之间的网络的功能和可靠性的保证。 Docker本身提供了容器到容器和容器到主机通信所需的基本网络结构。

Docker的本地网络功能提供了两种将容器挂接在一起的机制。 第一个是暴露容器的端口,并且可选地映射到主机系统以进行外部路由。 您可以选择要映射到的主机端口或允许Docker随机选择高的未使用端口。 这是一种提供访问容器的通用方法,该方法适用于大多数用途。

另一种方法是允许容器通过使用Docker“链接”进行通信。 链接容器将获取有关其对应的连接信息,如果配置为注意这些变量,则允许它自动连接。 这允许在同一主机上的容器之间的联系,而不必事先知道服务将位于何处的端口或地址。

这种基本的网络适用于单主机或密切管理的环境。 然而,Docker生态系统产生了多种项目,专注于扩展运营商和开发人员可用的网络功能。 通过其他工具提供的一些附加网络功能包括:

  • 覆盖网络以简化和统一多个主机上的地址空间。
  • 适于在各种组件之间提供安全通信的虚拟专用网络。
  • 分配每个主机或每个应用程序子网
  • 建立通信的macvlan接口
  • 为容器配置自定义MAC地址,网关等

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

  • 绒布 :覆盖网络提供一个单独的子网中的每台主机。
  • 编织 :覆盖网络塑造一个网络上的所有容器。
  • 管道 :先进的网络工具包,用于任意先进的网络配置。

要更深入地了解不同的方法与Docker网络,点击这里

计划,群集管理和编排

构建集群容器环境所需的另一个组件是调度程序。 调度程序负责在可用的主机上启动容器。

计划应用程序

上图显示了简化的调度决策。 该请求通过API或管理工具提供。 从这里,调度程序评估请求的条件和可用主机的状态。 在该示例中,它从分布式数据存储/发现服务(如上所述)提取关于容器密度的信息,使得其可以将新应用置于最不忙的主机上。

这个主机选择过程是调度器的核心职责之一。 通常,它具有自动化该过程的功能,管理员具有指定某些约束的选项。 其中一些限制可能是:

  • 在与另一个给定容器相同的主机上调度容器。
  • 确保容器未放置在与另一个给定容器相同的主机上。
  • 将容器放在具有匹配标签或元数据的主机上。
  • 将容器放在最不忙的主机上。
  • 在集群中的每台主机上运行容器。

调度程序负责将容器加载到相关主机上,并启动,停止和管理进程的生命周期。

因为调度程序必须与组中的每个主机交互,还通常包括集群管理功能。 这些允许调度程序获取有关成员的信息并执行管理任务。 在此上下文中的编排通常指容器调度和管理主机的组合。

一些流行的项目,作为调度程序和车队管理工具:

  • 车队 :调度和集群管理工具。
  • 马拉松 :调度和服务管理工具。
  • :调度和服务管理工具。
  • mesos :它整合主机资源调度程序主机的抽象服务。
  • kubernetes :能够管理容器集团先进的调度。
  • 组成 :容器编排工具,用于创建容器组。

要了解更多关于基本调度,容器编组,以及Docker集群管理软件,请点击这里

结论

到目前为止,您应该熟悉与Docker生态系统相关的大多数软件的一般功能。 Docker本身,以及所有的支持项目,提供了一个软件管理,设计和部署策略,实现巨大的可扩展性。 通过了解和利用各种项目的功能,您可以执行复杂的应用程序部署,这些部署足够灵活,可以满足可变操作需求。