25.2 安装Swarm
安装Swarm有几种方式,可以基于Docker Machine进行安装,也可以手动配置。为了能更容易理解Swarm的组件和更灵活地进行管理,推荐使用手动配置方式。
对于Docker 1.12+版本,Swarm相关命令已经原生嵌入到了Docker Engine中,对于较低版本的Docker,需要额外进行配置。
1.下载镜像
Docker官方已经提供了Swarm镜像,需要在所有被Swarm管理的Docker主机上下载该镜像:
- $ docker pull swarm
可以使用下面的命令来查看Swarm版本,验证是否成功下载Swarm镜像:
- $ docker run --rm swarm -v
- swarm version 1.2.2 (34e3da3)
2.配置节点
Docker主机在加入Swarm集群前,需要进行一些简单配置,添加Docker daemon的网络监听。例如,在启动Docker daemon的时候通过-H参数:
- $ sudo docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
注意
Docker 1.8.0前的版本不支持daemon命令,可以用-d代替。
如果是通过服务方式启动,则需要修改服务的配置文件。
以Ubuntu 14.04为例,配置文件为/etc/default/docker(其他版本的Linux上略有不同)。在文件的最后添加:
- DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
3.启动集群
Docker集群管理需要使用服务发现(Service Discover)功能,Swarm支持以下几种方式:Docker Hub、本地文件、Etcd、Consul、Zookeeper和手动指定节点IP地址信息等。
除了手动指定外,这些方法原理上都是通过维护一套数据库机制来管理集群中注册节点的Docker Daemon的访问信息。
本地配置集群推荐使用Consul作为服务发现后端。利用社区提供的Docker镜像,整个过程只需要三步即可完成。
(1)启动Consul服务后端
启动Consul服务容器,映射到主机的8500端口:
- $ docker run -d -p 8500:8500 --name=consul progrium/consul -server -bootstrap
获取到本地主机的地址作为consul的服务地址:<consul_ip>:8500。
(2)启动管理节点
首先启动一个主管理节点,映射到主机的4000端口,并获取所在主机地址为<manager0_ip>。其中4000端口是Swarm管理器的默认监听端口,用户也可以指定映射为其他端口:
- $ docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise
- <manager0_ip>:4000 consul://<consul_ip>:8500
为了提高可用性,也可以启动从管理节点。假定获取所在主机地址为<manager1_ip>:
- $ docker run -d swarm manage -H :4000 --replication --advertise <manager1_ip>:
- 4000 consul://<consul_ip>:8500
(3)启动工作节点
需要在每个工作节点上启动agent服务。获取节点的主机地址为<node_ip>,并指定前面获取到的consul服务地址:
- $ docker run -d swarm join --advertise=<node_ip>:2375 consul://<consul_ip>:8500
节点启动后,用户可以指定Docker服务地址为<manager0_ip>:4000>来测试各种Docker命令,可以看到整个Swarm集群就像一个虚拟的Docker主机一样正常工作。
由于Swarm实际上是通过agent调用了本地的Docker daemon来运行容器,当Swarm集群服务出现故障时,无法接受新的请求,但已经运行起来的容器将不会受到影响。
