by Steven Haines
【编者的话】我们已花大量时间研究Docker及亚马逊的弹性云计算(EC2)容器服务(ECS)组建Docker容器集群的解决方案。而本文将重点阐述通过Docker Swarm搭建原生态Docker集群的方法。
Docker Swarm介绍
Docker Swarm是Docker原生态的集群技术。他可同Docker或者Docker-Machine的命令行行工具配合,提供在主机集群上部署容器引擎的基本功能。Docker Swarm同亚马逊ECS在功能域上的确存在很大差异。
亚马逊ECS 利用自有技术栈来运行Docker容器,包括在虚拟宿主机上运行EC2实例,实现动态自动扩展和缩减虚拟机,使用弹性负载均衡器(ELB)将负载分发到各个Docker容器,等等。
从另一个角度讲,Docker Swarm还仅仅只是一个集群工具:通过Swarm来注册可运行Docker容器的服务器,然后Swarm将部署容器到这些虚拟机上,通过Swarm实现主机的启动和停止、注册和注销,并设置负载均衡策略注册和注销容器。
然而,亚马逊ECS 更倾向于在AWS环境中构建容器集群,Docker Swarm的确有能力运行在任何地方,包括在亚马逊之外。目前,许多组织接纳云计算较慢,或者运行在一种混合云环境中,让部分应用或实例运行在公有云上,剩余应用运行在本地的数据中心内。
因此,无论组织是否接纳了云平台,在混合云或纯数据中心环境中,采用Swarm均可发挥Docker的技术优势。
Docker Swarm是如何工作的?
实施Docker Swarm采用了两类组件:
图1 展示了相关概念
这个例子中,采用了一个Docker Swarm管理者,管理了两个代理(代理1、代理2),这两个代理运行了两个Nginx容器实例,这里管理者和代理都属于“Docker Machine”,“Docker Machine”含有Docker引擎并可运行Docker容器。在下一节中将看到,除了启动命令一个使用 Docker Machine命令而另一个使用docker命令外,Docker Machine和Docker容器自身非常相似。
在下一节的例子中将会阐述如何在本机上搭建一个Docker Swarm集群(参考图1中Docker主机的方式(在笔记本上搭建的方式))。在生产环境下,管理者和代理一样可直接运行在各自的虚拟机上。
开始Docker Swarm之旅
现在已经理解Docker Swarm的概念及工作原理,本节将带您一步一步的构建本地Docker Swarm集群,并启动运行。
第一步安装Docker,您可在相关链接中找到在Mac、Windows、Linux环境下安装Docker的相关信息,在安装Docker时,需要使用Docker-Machine的命令,创建Swarm的管理者和代理。 Docker Swarm的文档是这么定义Docker Machine的:
Docker Machine是一种在虚拟宿主机上安装Docker引擎工具,通过使用Docker-Machine命令行来管理宿主机。您可在办公网、数据中心或者云提供商(如AWS 或Digital Ocean)内,使用此命令在本机调用Mac或Windows的Virtualbox创建容器主机。使用Docker-Machine命令行可实现启动、检查、停止和重启一个管理者主机,升级Docker客户端及守护进程,以及配置同主机通信的Docker客户端。
启动Docker并打开一个Docker-Machine命令行终端,执行Docker-Machine的 ls 命令可看到所有运行在电脑上的Docker主机:
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM default * virtualbox Running tcp://192.168.99.100:2376
我的电脑上,只设置了的运行在IP地址192.168.99.100的”默认“主机。由于需要创建并启动三个新的主机(1个管理者,2个代理),故需停止默认主机来确保本机资源:
$ docker-machine stop default
使用Docker-Machine create命令来创建三个Docker 主机:
$ docker-machine create -d virtualbox manager
$ docker-machine create -d virtualbox agent1
$ docker-machine create -d virtualbox agent2
至此,这些主机跟Swarm还没有任何关系,他们只是需要在电脑上运行的虚拟机,-d参数定义了创建主机的驱动。当创建主机时在本地运行时,驱动则应该是Virtualbox,执行Docker-Machine的 ls 命令可看到所有Docker主机:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
agent1 - virtualbox Running tcp://192.168.99.101:2376 v1.11.1
agent2 - virtualbox Running tcp://192.168.99.102:2376 v1.11.1 default - virtualbox Stopped Unknown
manager * virtualbox Running tcp://192.168.99.100:2376 v1.11.1
我们运行了三个主机,叫做管理者、代理1和代理2.在启动Swarm集群前,还需创建一个发现令牌,发现令牌是Swarm集群的唯一标识,使用令牌启动管理者,代理用令牌向管理者注册自己。
创建发现令牌
要创建发现令牌,需运行一个Docker Swarm容器的实例,并发送“创建”的命令参数。有趣的是,Docker Swarm是构建在Docker技术基础之上的,本节介绍内容包括:(1)创建发现令牌;(2)启动一个Swarm集群的管理者;(3)启动Swarm集群的代理;都将在一个预置的名叫“swarm”的Docker容器上执行。让我们继续探究。
Docker命令行工具用来向激活的主机发送命令,如上段命令中所示,“管理者”主机的“ACTIVE”列有一个星号,这意味着所有的Docker命令都要发送给这个管理者主机,下面介绍如何更改激活的主机。
首先建立一个发现令牌:
$ docker run --rm swarm create
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
eada7ab697d2: Pull complete
afaf40cb2366: Pull complete
7495da266907: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:12e3f7bdb86682733adf5351543487f581e1ccede5d85e1d5e0a7a62dcc88116
Status: Downloaded newer image for swarm:latest
7c14cbf2a86ecd490a7ea7ae4b795a6b
这行命令看着有些眼熟:
在命令输出的最后一行就是发现令牌: 7c14cbf2a86ecd490a7ea7ae4b795a6b
。请保存,后续步骤需要使用。
后续文章将介绍如何启动Swarm管理者和代理。
原文链接: Docker Swarm入门:第一部分