搭建Docker Swarm集群(Mac OS)

一、集群概念

小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,两个厨师的关系是集群。为了让厨师专心炒菜,把菜做到极致,再请了个配菜师负责切菜,备菜,备料 … 厨师和配菜师的关系是分布式
一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。一个配菜师因故请假了,但是其余的配菜师还是该啥就干啥,只是没请假的配菜师任务均匀的加量了,但他们的任务和职责是不变的,这是集群

集群就是多人做同样一件事,分布式是多个人做不同的事。
摘自 https://blog.****.net/jiangyu1013/article/details/80417961

二、准备环境

  1. Mac OS 10.14.2
  2. Docker 2.0.0.0-mac81(29211)
  3. VirtualBox 6.0
  4. boot2docker 18.09.0
  5. boot2docker.iso 镜像

三、环境搭建

搭建Docker Swarm集群(Mac OS)
我们需要4个节点(1个master + 3个slave),由于没有真实地4台物理机,所以下文中是靠docker-machinevirtualbox以及boot2docker来虚拟出4个独立IP地址的带docker环境的节点。

  • 安装 Docker

注意:选择官方docker dmg包双击安装即可,docker-machine已经天然地集成于其中了,该工具在下文中创建虚拟节点时需要,它是一个可以在虚拟主机节点上安装docker engine的工具。

  • 安装 VirtualBox 6.0

由于我们搭建集群需要具备多个不同IP地址的节点,然而我们手上仅一台电脑,所以需要借助virtualbox来虚拟出多个不同IP地址的节点供我们使用需要。

  • 安装 VirtualBox 6.0

brew install boot2docker

四、开始搭建

  1. 创建节点
    首先要将之前下载的boot2docker.iso 镜像放到/Users/你的用户名/.docker/machine/cache/目录下(如果没有可以手动创建),然后执行如下命令(注意替换路径):

docker-machine create --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso master
docker-machine create --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso slave1
docker-machine create --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso slave2
docker-machine create --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso slave3

搭建Docker Swarm集群(Mac OS)
创建完之后,结果如下图:
搭建Docker Swarm集群(Mac OS)

可以用docker-machine ls命令查看一下各个节点的情况,可以看到自动为其分配了独立的IP地址:
搭建Docker Swarm集群(Mac OS)

开启4个独立的terminal终端,分别执行:

docker-machine ssh master
docker-machine ssh slave1
docker-machine ssh slave2
docker-machine ssh slave3

执行后效果如下图:
搭建Docker Swarm集群(Mac OS)

接下来在master上初始化一个docker swarm集群

执行命令:

docker swarm init --advertise-addr 192.168.99.104
注:192.168.99.104 是指你Master服务器IP

效果如下:
搭建Docker Swarm集群(Mac OS)

搭建Docker Swarm集群(Mac OS)

注意:如果忘了docker swarm join 命令中的token命令的话,可以使用命令docker swarm join-token worker来获取

至此集群搭建完毕,下面创建服务:
我们计划在该docker集群上部署tomcat容器任务来作为演示:
在master节点上执行如下命令来创建名为tomcat的service,让其有2份tomcat容器副本分配到集群中去,起在8080端口:

docker service create --replicas 2 -d -p 8080:80 --name tomcat registry.docker-cn.com/library/tomcat
注:用命令查看服务状态
docker service ls
docker service ps tomcat

效果如下:
搭建Docker Swarm集群(Mac OS)
然后拿任何一个节点ip访问tomcat都可以访问到,不管此节点有没有部署tomcat服务
搭建Docker Swarm集群(Mac OS)

如果想进一步扩展节点的tomcat服务需执行一下命令

docker service scale mytomcat=3

然后在master重新执行 docker service ls ,发现master会重新随机分配一个节点运行容器。如果某个节点意外宕机,master也会重新分配,实现了集群的高可用。

文章可能用到的命令

  • 创建虚拟主机节点
    docker-machine create 虚拟主机名
  • 查看虚拟机节点信息
    docker-machine ls
  • 停止虚拟主机节点
    docker-machine stop 虚拟主机名
  • 删除虚拟主机节点
    docker-machine rm 虚拟主机名
  • 初始化docker swarm集群
    docker swarm init --advertise-addr master的IP地址
  • slave节点加入集群
    docker swarm join --token [token] [master的IP]:[master的端口]
  • slave节点主动离开集群
    docker swarm leave
  • 在master上获取加入集群的token
    docker swarm join-token worker
  • master上创建service举例:
    docker service create --replicas 2 -d -p 8080:80 --name 服务名 镜像名
  • master上查看service信息
    docker service ls
    docker service ps 你所创建的服务的ID
  • 在master上删除service
    docker service rm 服务名
  • 在master上进行服务扩容
    docker service scale 你的service name=你要的副本数目

自此集群搭建完毕,后续会在真实服务器搭建集群,欢迎关注!

参考文献 https://www.imooc.com/article/22651