1、Swarm介绍

Swarm 这个项目名称特别贴切。在Wiki的解释中,Swarm behavior 是指动物的群集行为。比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作 Swarm behavior。Swarm 项目正是这样,通过把多个 Docker Engine 聚集在一起,形成一个大的 docker-engine,对外提供容器的集群服务。同时这个集群对外提供 Swarm API(命令),用户可以像使用 Docker Engine 一样使用Docker集群。

特点:

  1. 对外以 Docker API 接口呈现,这样带来的好处是,如果现有系统使用 Docker Engine,则可以平滑将 Docker Engine 切到 Swarm 上,无需改动现有系统。
  2. Swarm 对用户来说,之前使用 Docker 的经验可以继承过来,非常容器上手,学习成本和二次开发成本都比较低。同时 Swarm 本身专注于 Docker 集群管理,非常轻量,占用资源也比较少。简单说,就是插件化机制,Swarm中的各个模块都抽象出了 API,可以根据自己一些特点进行定制实现。
  3. Swarm 自身对 Docker 命令参数支持的比较完善,Swarm目前与 Docker 是同步发布的。Docker 的新功能,都会第一时间在 Swarm 中呈现。

2、Docker Swarm 架构

Swarm作为一个管理 Docker 集群的工具,首先需要将其部署起来,可以单独将 Swarm 部署在一个节点。另外,自然需要一个 Docker 集群,集群上每一个节点均需要安装 Docker.
image.png

3、Docker Swarm集群环境准备

搭建步骤

3.1、创建准备

  1. 1、准备三台已经安装 docker engine ubuntu/centos 系统主机(docker版本必须在1.12以上,老版本不支持 Swarm
  2. 2docker 容器主机的 ip 地址固定,集群中所有工作几点必须能访问该管理节点
  3. 3、集群管理节点必须使用相应的协议并且保证端口可用
  4. 集群管理通信:TCP,端口2377
  5. 节点通信:TCP UDP,端口7946
  6. 覆盖型网络:UDP,端口4789 overlay驱动
  7. 说明:三台容器主机的IP地址分别为:
  8. 192.168.200.162(管理节点)
  9. 192.168.200.163(工作节点)
  10. 192.168.200.158(工作节点)
  11. 主机名称分别为:manager1work1work2
  12. vim /etc/hostname(修改完成后需要重启)

4、Docker Swarm集群搭建实现

4.1、创建 Docker swarm

在 manager1 机器上创建 docker swarm 集群

  1. docker swarm init --advertise-addr 192.168.200.162
  2. (--advertise-addr将该IP地址的机器设置为集群管理节点;如果是单节点,无需该参数)

查看管理节点集群信息

  1. docker node ls

关闭三台机器的防火墙

  1. systemctl stop firewalld

4.2、向dokcer swarm中添加工作节点:在两个工作节点中分别执行如下命令,ip地址是manager节点

添加两个work节点

  1. docker swarm join --token *** 192.168.200.163:2377 (work1)
  2. docker swarm join --token *** 192.168.200.158:2377 (work2)
  3. (--token xxx:向指定集群中加入工作节点的认证信息,xxx认证信息是在创建docker swarm时产生的)

继续查看管理节点集群信息与之前的区别

  1. docker node ls

5、Docker Swarm部署alpine服务

在 Docker Swarm 集群中部署服务时,既可以使用 Docker Hub 上自带的镜像来启动服务,也可以使用自己通过 Dockerfile 构建的镜像来启动服务。如果使用自己通过 Dockerfile 构建的镜像来启动服务,那么必须先将镜像推送到 Docker Hub 中心仓库。为了方便学习,这里使用 Docker Hub上自带的 alpine 镜像为例来部署集群服务。

5.1、部署服务

  1. docker service create --replicas 1 --name helloworld alpine ping docker.com
  2. docker service create指令:用于在 Swarm 集群中创建一个基于 alpine 镜像的服务
  3. --replicas参数:指定了该服务只有一个副本实例
  4. --name参数:指定创建成功后的服务为helloworld
  5. ping docker.com指令:表示服务启动后执行的命令

5.2、查看 Docker Swarm 集群中的服务

查看服务列表:

  1. docker service ls

查看部署具体服务的详细信息:

  1. docker service inspect 服务名称

查看服务在集群节点上的分配以及运行情况:
docker service ps 服务名称

5.3、修改副本数量

在 manager1 上,更改服务器副本的数量(创建的副本会随机分配到不同的节点)

  1. docker service scale helloworld=5

5.4、删除服务

  1. docker service rm 服务名称

5.5、访问服务

查看集群环境下的网络列表:

  1. docker network ls

在 manager1 上创建一 overlay 为驱动的网络(默认使用的网络连接为ingress)

  1. docker network create -d=overlay my-multi-host-network

在集群管理节点 manager1 上部署一个 nginx 服务

  1. docker service create \
  2. --network my-multi-host-network \
  3. --name my-web \
  4. -p 8080:80 \