什么是swarm?为什么要用它?
Docker Swarm 是 Docker公司官方在 2014 年 12月初发布的一套管理 Docker 集群
的工具。它将一群 Docker 宿主机变成一个单一的,虚拟的主机。Swarm 使用标准的 Docker API 接口作为其前端访问入口,换言之,各种形式的Docker 工具比如 Dokku,Compose,Krane,Deis,docker-py,Docker 本身等都可以很容易的与 Swarm 进行集成。其架构图如下所示:
Docker集群管理和编排的特性是通过SwarmKit进行构建的,有两种方式来搭建集群:
- 使用swarm镜像方式;
- Swarm mode方式:它Docker Engine内置支持的一种默认实现。Docker 1.12以及更新的版本,都支持Swarm mode,我们可以基于Docker Engine来构建Swarm集群,然后就可以将我们的应用服务(Application Service)部署到Swarm集群中。创建Swarm集群的方式很简单,先初始化一个Swarm集群,然后将其他的Node加入到该集群即可。下面分别介绍两种方式:
使用外部swarm镜像搭建集群
# 下载swarm镜像
$ docker pull swarm
# 下载etcd镜像
$ docker pull docker.io/microbox/etcd
# 检查swarm版本
$ docker run --rm swarm -v
# 集群管理节点上执行,启动etcd服务
$ docker run -it -d -p 4001:4001 --name etcd docker.io/microbox/etcd -name discovery
# 在集群管理节点上执行,启动manger,主机的2376映射到容器内部的2375端口,2376端口可以更换,但是2375端口必须固定
$ docker run -it -d -p 2376:2375 --name swarm-manager docker.io/swarm manage etcd://{localhost-ip}:4001
# 在要加入集群的节点上执行,将该节点加入集群
$ docker run -it -d --name swarm-agent docker.io/swarm join --addr {localhost-ip}:2375 etcd://{manager-ip}:4001
$ docker run -it -d --name swarm-agent docker.io/swarm join --addr {localhost-ip}:2375 etcd://{manager-ip}:4001
# 在集群中任意一台主机上执行,和管理节点通信,获取相应的信息
$ docker -H {manager-ip}:2376 info
$ docker -H {manager-ip}:2376 ps
使用内置的swarm mode搭建docker集群
# 建立一个swarm集群,在manager节点上执行
$ docker swarm init --advertise-addr {manager-ip} --listen-addr {manager-ip}
# 获取提示信息,在manager节点上执行
$ docker swarm join-token worker
# 将worker加入swarm集群中,在worker节点上执行
$ docker swarm join --token SWMTKN-1-1lpkoxfruoi7zaxub7dfm1bupd9hi109rh1hn4abq9kz2cgqqp-6qmrijj3xvjnx9wnp53yafdpl {manager-ip}:2377
节点管理
# 获取集群节点信息,在manager节点上执行
$ docker node ls
# 获取集群指定节点的详细信息,在manager节点上执行
$ docker node inspect self
$ docker node update --availability drain manager
服务管理
$ docker service create --replicas 1 --name myredis redis
以上只是简单介绍了搭建步骤,详细了解swarm请参考官方网站提供的资料。