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

【编者的话】本篇文章是介绍Docker生态系统的第一篇,不仅从概念上介绍了容器化、服务发现和全局配置存储、网络工具、调度、集群管理和编排这几部分内容,而且配以清晰易懂的例子进行讲解说明,非常值得读者称赞。Docker是现在使用最多的容器化软件。与其它已经存在的容器化系统相比,Docker可以更加简单的创建和管理容器,并与其它开源软件集成。

简介

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

Docker和容器化

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

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

Docker的主要优点:

  • 轻量级资源使用:容器在进程级别隔离并使用宿主机的内核,而不需要虚拟化整个操作系统。
  • 可移植性:一个容器应用所需要的依赖都在容器中,这就让它可以在任意一台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已经为开发者和管理员提供一个简单的平台来创建和部署可扩展的应用。在这个系列中,我们将探索Docker如何与其他组件整合在一起,并用它们提供的工具集来便捷地提供高可用性的分布式系统。

  1. 常用组件介绍(本文)
  2. 容器化的综述(翻译完毕)
  3. 服务发现和分布式配置存储(翻译完毕)
  4. 网络与通信(翻译完毕)
  5. 调度与编排(翻译完毕)

原文链接:The
Docker Ecosystem: An Introduction to Common Components
 (译者:陈杰 审校:郭蕾)

===========================

译者介绍

陈杰,北京理工大学计算机学院在读博士,研究方向是自然语言处理在企业网络信誉评价方面的应用,平时也乐于去实现一些突发的想法。在疲于配置系统环境时发现了Docker,跟大家一起学习、使用和研究Docker。

时间: 2024-12-08 00:26:27

Docker生态系统系列之一:常用组件介绍的相关文章

Flask自带的常用组件介绍

Flask的优点是灵活小巧,三行代码即可运行一个web服务器,但基于Flask构建的功能并不比Django弱,关键就就是除了flask自带的基础功能外,还有丰富的组件进行支持,本文先对常用的自带组件进行简单的介绍.测试的Flask版本是0.12. Flask自带组件 在构建Flask应用导入的时候,通常是from flask import Flask的方式开始的,说明flask这个python package里面应该还藏了不少好东西,从源码来看看: from werkzeug.exception

【jmeter】jmeter 常用组件 介绍

看了性能测试第一期的脚本,总结下脚本里面使用到的组件和技术手段 1.线程组 右键--添加--线程--线程组 2.简单控制器 添加--逻辑控制器--简单控制器 好处: 主要是让脚本 分层 ,更清晰 3.仅一次控制器 添加--逻辑控制器--仅一次控制器 用这个的场景:在简单控制器下面还需要分层的 就用仅一次控制器 4.http 请求默认值 添加--配置元件--http 请求默认值 一般请求 的请求域名都是一样的,没必要每个都要写上请求域名,于是我们可以把一些公用的提取出来 放在 http 请求默认值

Hadoop以及组件介绍

一.背景介绍 在接触过大数据相关项目的时候常常都会听到Hadoop这个东西,简单来说,他是一个用分布式计算来处理大数据的开源软件,下面包含了许多的组件和子项目,这篇文章将会介绍Hadoop的原理以及一些组件的应用. 二.准备工作 1.确认储存规模 有很多的大数据项目其实数据量跟本没这么大,跟本不需要到使用Hadoop这类的大数据软件,所以,第一步应该是先确认数据量有多大,真的MySQL跑的太久再去使用Hadoop就好. 2.确认数据类型 除了结构化数据以外,现在有些大数据项目需要处理的是一些非结

Flask常用扩展介绍系列文章索引

这篇文章包含常用扩展介绍系列文章的索引目录. 关于扩展的基础知识可以阅读<Flask扩展的配置.初始化与管理>了解. *扩展列表按照写作时间排序 Flask-WTF 文章:关于Flask表单,我所知道的一切 GitHub主页:lepture/flask-wtf 文档:Flask-WTF - Flask-WTF 0.14 Flask-Uploads 文章:Flask文件上传(二):使用扩展实现 GitHub主页:maxcountryman/flask-uploads 文档:Flask-Uploa

Docker深入浅出系列 | 容器初体验

Docker深入浅出系列 | 容器初体验 教程目标 Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方文档,本章目标如下: 了解什么是Docker 了解Docker解决了什么 了解什么是镜像和容器 了解容器与虚拟机的区别 了解Vagrant与Docker的区别 了解Docker引擎和架构 了解Docker的镜像分层 了解VirturalBox和Do

Docker入门教程(一)介绍

http://dockone.io/article/101 Docker入门教程(一)介绍 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第一篇,介绍了Docker的基础概念以及Docker的安装. Docker是一个新的容器化的技术,它轻巧,且易移植,号称“build once, configure once and run anywhere(译者注:这个就不翻译了,翻译出来味道就没了)”.本文是Flux7的Docker系列教程的第一部分.请和这

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

RDIFramework.NET ━ .NET快速信息化系统开发框架 工作流程组件介绍 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案. 1.RDIFramework.NET框架介绍 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开发系统提供了强大的支持,开发人员不需要开发系统的基础功能和公共模块,框架自身提供了强大的函数库和开发包,开发人员只须集中精力专注于业

01-集群环境及组件介绍

介绍 Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能. 通过Kubernetes你可以: 快速部署应用 快速扩展应用 无缝对接新的应用功能 节省资源,优化硬件资源的使用 我们的目标是促进完善组件和工具的生态系统,以减轻应用程序在公有云或私有云中运行的负担. Kubernetes 特点 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud) 可扩展: 模块化, 插件化, 可挂载, 可组合 自动化: 自动部署,自动重启,

Ansible的安装、配置及常用模块介绍

Ansible的安装.配置及常用模块介绍 ansible安装方式 1. ansible安装常用两种方式,yum安装和pip程序安装 这里提供二种安装方式,任选一种即可: 1.使用yum安装 yum install epel-release -y yum install ansible –y 2. 使用pip(python的包管理模块)安装 pip install ansible   #如果没pip,需先安装pip.yum可直接安装: yum install python-pip pip inst