Just Do IT !

Docker 三剑客之Machine,Compose,Swarm

字数统计: 3.4k阅读时长: 12 min
2020/05/12 Share

Docker三剑客

为了把容器化技术的优点发挥到极致,docker公司先后推出了三大技术

  • docker-machine
  • docker-compose
  • docker-swarm
    它们可以说是几乎实现了容器化技术中所有可能需要的底层技术手段。
    在这里插入图片描述

    图源: https://xiaoxiami.gitbook.io/docker/docker-ji-qun

  • docker-machine - 提供容器服务
  • docker-compose - 提供脚本执行服务,不用在像以前把容器的启动命令写的非常的长,用compose编写脚本就能简化容器的启动
  • 几条简单指令就可以创建一个docker集群,最终实现分布式的服务

    Docker 三剑客之 Machine

    Docker Machine 是 Docker 官方三剑客项目之一 ,负责使用 Docker 容器的第一步 :在多
    种平台上快速安装和维护 Docker 运行环境 。 它支持多种平 台 ,让用户可以在很短时间内在
    本地或云环境中搭建一套 Docker 主机集群。

Machine 简介

Machine 项目是 Docker 官方的开源项目 ,负责实现对 Docker 运行环境进行安装和管理,特别在管理多个 Docker 环境时,使用 Machine 要比手动管理高效得多。

Machine 的定位是“在本地或者云环境中创建 Docker 主机”

其代码在https://github.com/docker/machine 上开源,遵循 Apache-2.0 许可

Machine 项目主要由 Go 语言编写,用户可以在本地任意指定由 Machine 管理的 Docker主机,并对其进行操作。

其基本功能包括:

  • 在指定节点或平台上安装 Docker 引擎,配置其为可使用的 Docker 环境;
  • 集中管理(包括启动 、查看等)所安装 的Docker 环境。

Machine 连接不同类型的操作平台是通过对应驱动来实现 的,目前已经集成了包括AWS 、 IBM 、 Google ,以及 OpenStack 、 VirtualBox 、 vSphere 等多种云平台的支持。

安装

在 Linux 平台上的安装十分简单,推荐从官方 Release 库https://github.corn/docker/machine/releases 直接下载编译好的二进制文件即可

在 Linux 64 位系统上直接下载对应的二进制包

1
2
3
4
5
6
$  sudo  curl  -L  https://github.com/docker/machine/releases/download/v0.13.0/docker-machine- ' uname  -s'-'uname -m ' >  docker-machine 
$ sudo mv docker-machine /usr/ local/bin/docker-machine
$ sudo chmod +x /usr/local/bin/docker-machine
安装完成后,查看版本信息,验证运行正常:
$ docker-machine -v
docker-machine version 0.13.0

当要对多个 Docker 主机环境进行安装、配置和管理时,采用 Docker Machine 的方式将远比手动方式
快捷。 不仅提高了操作速度,更通过批量统一的管理减少了出错的可能。 尤其在大规模集群和云平台环境中推荐使用

Docker 三剑客之 Compose

编排( Orchestration )功能,是复杂系统是否具有灵活可操作性的关键。 特别在 Docker应用场景中,编排意味着用户可以灵活地对各种容器资源实现定义和管理。

Compose 作为 Docker 官方编排工具,其重要性不言而喻,它可以让用户通过编写一个简单的模板文件,快速地创建和管理基于 Docker 容器的应用集群。

Compose 简介

Compose 项目是 Docker 官方的开源项目,负责实现对基于 Docker 容器的多应用服务的快速编排。 从功能上看,跟 Open Stack 中的 Heat 十分类似。 其代码目前在 https://github .com/docker/compose 巳上开源 。

Compose 定位是“定义和运行多个 Docker 容器的应用”,其前身是开源项目Fig ,目前仍然兼容 Fig 格式的模板文件。

在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。 例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括前端的负载均衡容器等。

Compose 恰好满足了这样的需求。 它允许用户通过一个单独的 docker-compose.yml模板文件( YAML 格式)来定义一组相关联的应用容器为一个服务樵( stack )

Compose 中有几个重要的概念:

  • 任务( task ) : 一个容器被称为一个任务。 任务拥有独一无二的 ID ,在同一个服务中的多个任务序号依次递增 。

  • 服务( service ):某个相同应用镜像的容器副本集合,一个服务可以横向扩展为多个容器实例 。

  • 服务枝 ( stack ) :由 多个服务组成 ,相互配合完成特定业务 , 如 Web 应用服务、数据
    库服务共同构成 Web 服务钱 ,一般由一个 docker-cornpose.yml 文件定义。

Compose 的默认管理对象是服务钱,通过子命令对栈中的多个服务进行便捷的生命周期管理。

Compose 项目由 Python 编写 ,实现上调用了 Docker 服务提供的 API 来对容器进行管理。

因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

Compose安装

二进制包安装

这些发布的二进制包可以在https://github.com/docker/compose/releases 页面找到

将这些二进制文件下载后直接放到执行路径下,并添加执行权限即可。

1
2
3
4
5
6
7
8
9
$  sudo  curl  -L  https : //github.com/docker/compose/releases/download/1.19.0/docker-compose- ’ uname  -s ’- ’ uname  -m’ >  / usr/ local / bin/ docker-compose 
$ sudo chmod a+x /usr/local/bin/docker-cornpose
可以使用 docker-compose version 命令来查看版本信息,以测试是否安装成功:

$ docker-compose version
docker compose version 1.19.0
docker-py version : 2.7.0
CPython version : 2.7.12
OpenSSL version : OpenSSL l.0.2g

在 Docker 三剑客中, Compose 掌管运行时的编排能力,位置十分关键。 使用 Compose模板文件,用户可以编写包括若干服务的一个模板文件快速启动服务栈;如果分发给他人,也可快速创建一套相同的服务栈。

Docker 三剑客之 Swarm

Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker官方对容器云生态进行支持的核心方案。 使用它,用户可以将多个 Docker 主机抽象为大规模的虚拟 Docker 服务,快速打造一套容器云平台

Swarm 简介

Docker Swarm 是 Docker 公司推出的官方容器集群平台 , 基于 Go 语言实现,代码开源在 https:// github.com/ docker/swarm

目前,包括 Rackspace 等平台都采用了 Swarm ,用户也很容易在 AWS 等公有云平台使用 Swarm 。

Swarm 的前身是 Beam 项目和 libswarm 项目,首个正式版本( Swarm Vl )在 2014 年 12 月初发布 。 为了提高可扩展性, 2016 年 2 月对架构进行重新设计,推出了 V2 版本,支持超过 lK 个节点 。最新的 Docker Engine ( 1.12 后)已经集成SwarmKit 内嵌了对 Swarm 模式的支持。

作为容器集群管理器, Swarm 最大的优势之一就是原生支持 Docker API ,给用户使用带来极大的便利 。 各种基于标准 A凹的工具比如 Compose 、 Docker SDK 、各种管理软件, 甚至Docker 本身等都可以很容易的与 Swarm 进行集成。 这大大方便了用户将原先基于单节点的系统移植到 Swarm 上。 同时 Swarm 内置了对 Docker 网络插件的支持,用户可以很容易地部署跨主机的容器集群服务。

Swarm 也采用了典型的“主从”结构
“主从”结构

通过 Raft 协议来在多个管理节点( Manager )中实现共识。 工作节点( Worker )上运行 agent 接受管理节点的统一管理和任
务分配。 用户提交服务请求只需要发给管理节点即可,管理节点会按照调度策略在集群中分配节点来运行服务相关的任务

在 Swarm V2 中,集群中会自动通过 Raft 协议分布式选举出 Manager 节点,无须额外的发现服务支持,避免了单点瓶颈。 同时, V2 中内置了基于 DNS 的负载均衡和对外部负载均衡机制的集成支持。

Swarm 基本概念

Swarm 在 Docker 基础上扩展了支持多节点的能力,同时兼容了大部分的 Docker 操作。Swarm 中以集群为单位进行管理,支持服务层面的操作。

1. Swarm 集群

Swarm 集群( Cluster )为一组被统一管理起来的 Docker 主机。 集群是 Swarm 所管理的对象。 这些主机通过 Docker 引擎的 Swarm 模式相互沟通,其中部分主机可能作为管理节点(manager)响应外部的管理请求,其他主机作为工作节点( worker )来实际运行 Docker 容器。当然,同一个主机也可以即作为管理节点,同时作为工作节点 。

当用户使用 Swarm 集群时,首先定义一个服务(指定状态、复制个数、网络、存储 、 暴露端- 等),然后通过管理节点发出启动服务的指令,管理节点随后会按照指定的服务规则进行调度,在集群中启动起来整个服务,并确保它正常运行。

2. 节点

节点(Node )是 Swarm 集群的最小资源单位。 每个节点实际上都是一台 Docker 主机。
Swarm 集群中节点分为两种:

  • 管理节点( manager node ): 负责响应外部对集群的操作请求,并维持集群中资源,分发任务给工作节点 。 同时,多个管理节点之间通过 Raft 协议构成共识。 一般推荐每个集群设置 5 个或 7 个管理节点;
  • 工作节点( worker node ):负责执行管理节点安排的具体任务。 默认情况下,管理节点自身也同时是工作节点 。 每个工作节点上运行代理( agent )来汇报任务完成情况。用户可以通过 docker node promote 命令来提升一个工作节点为管理节点;或者通过docker node demote 命令来将一个管理节点降级为工作节点。

    3. 服务

    服务( Service)是 Docker 支持复杂多容器协作场景的利器。一个服务可以由若干个任务组成,每个任务为某个具体的应用。 服务还包括对应的存储 、 网络 、 端- 映射、副本个数 、 访问配置 、 升级配置等附加参数。一般来说,服务需要面向特定的场景,例如一个典型的 Web 服务可能包括前端应用 、 后
    端应用,以及数据库等。 这些应用都属于该服务的管理范畴。

Swarm 集群中服务类型也分为两种(可以通过-mode 指定) :

  • 复制服务( replicated services )模式 : 默认模式,每个任务在集群中会存在若干副本,
    这些副本会被管理节点按照调度策略分发到集群中的工作节点上。 此模式下可以使
    用-replicas 参数设置副本数量 ;
  • 全局服务( global services )模式 : 调度器将在每个可用节点都执行一个相同的任务。
    该模式适合运行节点的检查,如监控应用等。

    4. 任务

    任务是 Swarm 集群中最小的调度单位,即一个指定的应用容器。 例如仅仅运行前端业务的前端容器。 任务从生命周期上将可能处于创建( NEW ) 、 等待( PENDING ) 、 分配( ASSIGNED ) 、 接受( ACCEPTED ) 、 准备( PREPARING )、开始( STARTING ) 、 运行 (RUNING) 、 完成(COMPLETE )、失败(FAILED ) 、 关闭(SHUTDOWN) 、 拒绝(PEJECTED ) 、孤立( ORPHANED )等不同状态 。

Swarm 集群中的管理节点会按照调度要求将任务分配到工作节点上。 例如指定副本为 2时,可能会被分配到两个不同的工作节点上。一旦当某个任务被分配到一个工作节点,将无法被转移到另外的工作节点,即 Swarm 中的任务不支持迁移。

5 . 服务的外部访问

Swarm 集群中的服务要被集群外部访问,必须要能允许任务的响应端口映射出来。Swarm 中支持入口负载均衡(ingress load balancing )的映射模式。 该模式下,每个服务都会被分配一个公开端口( PublishedPort ),该端口在集群中任意节点上都可以访问到,并被保留给该服务。

当有请求发送到任意节点的公开端- 时,该节点若并没有实际执行服务相关的容器,则会通过路由机制将请求转发给实际执行了服务容器的工作节点 。

通过使用 Swarm ,用户可以将若干 Docker 主机节点组成的集群当作一个大的虚拟 Docker 主机使用 。 并且,原先基于单机的Docker 应用,可以无缝地迁移到 Swarm 上来。 通过使用服务, Swarm 集群可以支持多个应用构建的复杂业务,并很容易对其进行升级等操作 。

在生产环境中, Swarm 的管理节点要考虑高可用性和安全保护,一方面多个管理节点应该分配到不同的容灾区域,另一方面服务节点应该配合数字证书等手段限制访问 。Swarm 功能已 经被无缝嵌入Docker 1.12+版本中,用户今后可 以 直接使用 Docker命令来完成相关功能的配置,对 Swarm 集群的管理更加简便。

CATALOG
  1. 1. Docker三剑客
    1. 1.1. Docker 三剑客之 Machine
      1. 1.1.1. Machine 简介
      2. 1.1.2. 安装
    2. 1.2. Docker 三剑客之 Compose
      1. 1.2.1. Compose 简介
      2. 1.2.2. Compose安装
    3. 1.3. Docker 三剑客之 Swarm
      1. 1.3.1. Swarm 简介
      2. 1.3.2. Swarm 基本概念
        1. 1.3.2.1. 1. Swarm 集群
        2. 1.3.2.2. 2. 节点
        3. 1.3.2.3. 3. 服务
        4. 1.3.2.4. 4. 任务
        5. 1.3.2.5. 5 . 服务的外部访问