Loading

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。

Docker Swarm架构

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集群

  • 向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

向Docker Swarm中添加工作节点

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:表示服务启动执行的命令

部署alpine服务

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 服务名称

删除服务

posted @ 2020-09-13 09:32  许大仙  阅读(286)  评论(0编辑  收藏  举报