Docker容器: Swarm & Compose

发布于 2017-10-09 · 本文总共 3263 字 · 阅读大约需要 10 分钟

Swarm

Swarm 是 Docker公司在 2014 年 12 月初新发布的容器管理工具。和 Swarm 一起发布的 Docker 管理工具还有 Machine 以及 Compose

Swarm 是一套较为简单的工具,用于管理 Docker集群,使得 Docker集群暴露给用户时 相当于一个虚拟的整体。;

Swarm架构

Swarm作为一个管理Docker集群的工具,需要先将其部署于某一节点上; 可以部署于物理服务器、虚拟机或者Docker容器中;

Swarm Node

Swarm 的主控节点,角色由运行的 Swarm 程序来充当。 Swarm Node 正常运行之后,该节点可以按需完成容器调度的任务,最终达到管理 Docker Node 集群 的效果;

Docker Node

Docker Node 指的是运行 Docker Daemon 的计算节点;

Node Discovery

属于Swarm架构中的服务发现机制; 获知Docker集群中的Docker Node 数量以及每个Docker Node具体的信息,关乎Swarm的管理效率以及集群的扩展能力;

schrduler

Swarm Node的调度器;scheduler为每一个容器的调度请求确定候选的Docker Node;

scheduler的策略有三种: spread、 binpack以及random

Swarm命令

Docker Client发送请求给 Swarm; Swarm处理请求并发送至相应的 Docker Node ; DockerNode 执行相应的操作并返回响应;

  • swarm create

创建一个集群标志;

swarm管理Docker集群时,Docker Node通过这个集群标志实现节点注册功能; Swarm通过该标志发现集群中的Docker Node;

  • swarm manage

swarm manage接收并处理Docker集群的管理请求;

  • swarm join

将Docker Node添加至Swarm管理的Docker集群中; swarm join命令的执行位于Docker Node,因此在Docker Node上运行该命令,首先必须安装Swarm;

  • swarm list

列举Docker集群中的Docker Node;

Compose

Docker诞生于2013年3月,同年12月,基于Docker容器的部署工具Fig诞生;

作为Docker界容器自动化部署工具的翘楚, Fig原本是英国伦敦一家创业型公司的产品; 随着产品的发展,Fig的巨大潜力受到工业界的普遍认可,在不到一年的时间内就受到Docker公司的密切关注; 2014年7月Docker收购Fig;收购完成之后,Fig改名为Compose,命令改为docker-compose;

Docker Compose介绍

Compose将所有容器参数通过精简的配置文件来存储,用户最终通过简短有效的docker-compose命令管理该配置文件, 完成Docker容器的部署;

1.配置文件数据的结构化程度高,可读性强;

2.进行多容器的管理;

Compose软件的开发绝大部分通过Python语言完成;

Compose架构

Compose配置文件示例:

web: 
    build:
    links: 
        - db 
    ports:
        - "8000:8000"
db:
    image: postgres  

Compose评价

缓解了用户部署与管理容器的痛点; 用户无须再录入冗长的命令行命令; 扩宽了容器的部署范畴:从命令行的单容器部署到Compose的多容器部署;

Compose单机能力

Compose带来的是单机的便利,面对跨宿主机的容器部署与管理,Compose的能力依然薄弱; 同时,Compose在单机上也并非可以完成所有的工作;

Compose跨节点能力

实际应用场景下,Docker用户往往希望将不同类型的容器部署在不同的Docker节点上,满足负载、安全、资源利用等多方面的考虑;

Compose目前不具备这样的能力;

Compose与Swarm

Docker正在酝酿着Compose与Swarm的深度结合,目标是: 使用户在一个Swarm集群上运行Compose来部署容器,效果和在单机上使用Compose完全一致;

Docker Machine

2014年12月,Docker官方在荷兰举办的DockerCon大会上宣布推出Docker Machine;预示着Docker从原先的单机部署迈向集群部署;

Docker在单机上的能力已经征服大量优秀的开发者; 随着数十年来分布式系统的发展,分布式领域同样对Docker有着非常强烈的诉求; 如何在服务器上自动化部署Docker,如何跨宿主机部署,如何使Docker的部署适应不同的基础设施环境, 都会是Docker在分布式生产环境中落地时必须考虑的因素; 在这样的背景下,Machine应运而生;

Machine使得Docker的部署异常简单,无论是单个主机、数据中心、还是云主机;

Machine架构

官方下载地址: http://docs.docker.com/machine/

项目地址: https://github.com/docker/machine

Machine

软件实现过程中抽象出的一个数据结构;

对于docker-machine create命令而言,一个Machine对象会创建,然后所有与该Machine相关的信息都存储到指定的路径中;

Store

对于每一个创建的Machine对象相应的元数据都会被持久化到本地文件系统中, Store则用于告知用户这些元数据的存储位置;

Store 类型包含三个属性:

root:Machine 对象信息存储的根目录;

caCertPath:连接Machine所需证书的路径;

privateKeyPath:通过ssh连接虚拟机时私钥所在路径;

Host

通过Machine在相应的基础设施上创建的虚拟机;每一个 Host对象都包含Machine管理一台虚拟机所需要的所有信息;

Driver

在基础设施平台上从无到有创建虚拟机:

所有创建虚拟机的请求,最终都需要落实到指定的Driver层;

Driver向具体的基础设施发起虚拟机创建请求,基础设施的响应也将首先返回至Driver;

Provisioner

Provisioner完成Docker安装与配置的任务;

Provision流程:

1.为虚拟机设置主机名hostname;

2.若虚拟机中没有安装Docker,则为其安装Docker;

3.配置Docker Daemon参数,使其启动后仅仅接受TLS连接;

4.复制证书至本地Machine实例的目录,井上传证书以及TLS认证信息至虚拟机;

5.若用户指定Machine与Swarm的结合,通过Docker启动Swarm容器,并对其进行配置。

Machine运行流程

以“OpenStack平台上创建一台虚拟机,虚拟机的操作系统为Ubuntu,并且虚拟机中必须安装有Docker”为例:

Machine的运行流程主要围绕Machine、 Host、 Provisioner展开,如下:

1.用户通过docker-machine运行用户命令。该命令中必须要包含openstack driver的名称,以及为所创建虚拟机指定的名称,命令的示例如下: docker-machine create -d openstack dev..

2.Machine解析Create命令,配置Store参数,检测driver类型,创建Machine对象, 并配置hostOptions参数;

3.Machine通过虚拟机指定的名称,用户指定的driver,以及虚拟机配置信息hostOptions 创建Host对象;

4.Machine将创建的虚拟机设置为active状态。

Machine与Swarm的结合

Machine在Docker体系中的作用是:创建装有Docker的虚拟机;

Machine具有强大的部署能力,但不能很好的调度和管理Docker集群; Swarm的作用正是对Docker集群进行有效的管理和调度;

refs

https://cloud.tencent.com/developer/article/1121934




本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:邱文奇(qiuwenqi)的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!
阅读次数:

文章评论

comments powered by Disqus


章节列表