Docker Swarm
1 Docker Swarm介绍
- 在Wiki的解释中,Swarm behavior是指动物的群集行为。比如我们常见的蜂群、鱼群,秋天往南飞的燕群都可以称作为Swarm behavior。Swarm项目正是如此,通过把多个Docker Engine聚集在一起,形成一个大的Docker Engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker集群。
- Swarm是Docker公司在2014年12月初发布的容器管理工具,和Swarm一起发布的Docker管理工具还有Machine以及Compose。Swarm是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm将一群Docker宿主机变成一个单一的、虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client均可以直接和Swarm直接通信。Swarm几乎全部用Go语言完成开发,Swarm0.2版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们以及支持更多的Docker命令以及集群驱动。Swarm deamon只是一个调度器(Scheduler)加上路由器(Router),Swarm自己不运行容器,它只是接受Docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照样运行,当Swarm恢复运行之后,它会收集重建集群信息。
2 Docker Swarm特点
- 对外以Docker API接口呈现,这样带来的好处是,如果现有系统使用Docker Engine,则可以平滑将Docker Engine切到Swarm上,无需改动现有系统。
- Swarm对用户来说,之前使用Docker的经验可以继承过来。非常容易上手,学习成本和二次开发成本都比较低。同时Swarm本身专注于Docker集群管理,非常轻量,占用资源也非常少。简单的说,就是插件化机制,Swarm中的各个模块都抽象出了API,可以根据自己的一些特点进行定制实现。
- Swarm自身对Docker命令参数支持的比较完善,Swarm目前和Docker是同步发布的。Docker的新功能都会第一时间在Swarm中体现。
3 Docker Swarm架构
- Swarm作为一个管理Docker集群的工具,首先需要将其部署起来,可以单独将Swarm部署于一个节点。另外,自然需要一个Docker集群,集群上每一个节点均安装Docker。
4 Docker Swarm的使用
4.1 环境准备
- 准备三台已经安装Docker Engine的CentOS系统主机(Docker的版本必须是1.12以上的版本,老版本不支持Swarm)。
- Docker容器主机的ip地址固定,集群中所有工作节点必须能访问该管理节点。
- 集群管理节点必须使用相应的协议并且保证端口可用。
集群管理通信:TCP,端口2377
节点通信:TCP和UDP,端口7946
覆盖型网络:UDP,端口4789
备注:
192.168.219.100 管理节点
192.168.219.101 工作节点
192.168.219.102 工作节点
4.2 Docker Swarm集群搭建实现
注意:在测试时,最好关闭防火墙。
- 在192.168.219.100机器上创建Docke Swarm集群。
docker swarm init --advertise-addr 192.168.219.100
备注:
--advertise-addr将该IP地址的机器设置为集群管理节点,如果是单节点,无需该参数
- 查看管理节点集群信息:
docker node ls
- 向Docker Swarm中添加工作节点:在两个工作节点中分别执行如下的命令,ip地址是manager节点的
# 在192.168.219.101中执行如下的命令
docker swarm join --token SWMTKN-1-1b8cgc1f61a9j7a84voptpfm15afnmfp8hpcizvichqid5ko11-cf094t5ymy0hzaharru9ocoty 192.168.219.100:2377
备注:
--token XXX:向指定集群中加入工作节点的认证信息,xxx认证信息是在创建Docker Swarm时产生的
# 在192.168.219.102中执行如下的命令
docker swarm join --token SWMTKN-1-1b8cgc1f61a9j7a84voptpfm15afnmfp8hpcizvichqid5ko11-cf094t5ymy0hzaharru9ocoty 192.168.219.100:2377
备注:
--token XXX:向指定集群中加入工作节点的认证信息,xxx认证信息是在创建Docker Swarm时产生的
- 查看管理节点集群信息:
docker node ls
4.3 Docker Swarm中部署alpine服务
4.3.1 部署服务
docker service create --replicas 1 --name helloworld alpine ping docker.com
备注:
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]:用于在Swarm集群中创建一个基于alpine镜像的服务
--replicas num:指定了该服务只有一个副本实例
--name 服务名称:创建成功后的服务名称
ping docker.com:表示服务启动执行的命令
4.3.2 查看服务
- 查看服务列表:
docker service ls
- 查看部署具体服务的详细信息:
docker service inspect 服务名称
- 查看服务在集群节点上的分配以及运行情况:
docker service ps 服务名称
4.3.3 修改副本数量
docker service scale helloworld=5
4.3.4 删除服务
docker service rm 服务名称