Docker容器: Swarm & Compose
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