1、Swarm介绍
Swarm 这个项目名称特别贴切。在Wiki的解释中,Swarm behavior 是指动物的群集行为。比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作 Swarm behavior。Swarm 项目正是这样,通过把多个 Docker Engine 聚集在一起,形成一个大的 docker-engine,对外提供容器的集群服务。同时这个集群对外提供 Swarm API(命令),用户可以像使用 Docker Engine 一样使用Docker集群。
特点:
- 对外以 Docker API 接口呈现,这样带来的好处是,如果现有系统使用 Docker Engine,则可以平滑将 Docker Engine 切到 Swarm 上,无需改动现有系统。
- Swarm 对用户来说,之前使用 Docker 的经验可以继承过来,非常容器上手,学习成本和二次开发成本都比较低。同时 Swarm 本身专注于 Docker 集群管理,非常轻量,占用资源也比较少。简单说,就是插件化机制,Swarm中的各个模块都抽象出了 API,可以根据自己一些特点进行定制实现。
- Swarm 自身对 Docker 命令参数支持的比较完善,Swarm目前与 Docker 是同步发布的。Docker 的新功能,都会第一时间在 Swarm 中呈现。
2、Docker Swarm 架构
Swarm作为一个管理 Docker 集群的工具,首先需要将其部署起来,可以单独将 Swarm 部署在一个节点。另外,自然需要一个 Docker 集群,集群上每一个节点均需要安装 Docker.
3、Docker Swarm集群环境准备
搭建步骤
3.1、创建准备
1、准备三台已经安装 docker engine 的 ubuntu/centos 系统主机(docker版本必须在1.12以上,老版本不支持 Swarm)
2、docker 容器主机的 ip 地址固定,集群中所有工作几点必须能访问该管理节点
3、集群管理节点必须使用相应的协议并且保证端口可用
集群管理通信:TCP,端口2377
节点通信:TCP 和 UDP,端口7946
覆盖型网络:UDP,端口4789 overlay驱动
说明:三台容器主机的IP地址分别为:
192.168.200.162(管理节点)
192.168.200.163(工作节点)
192.168.200.158(工作节点)
主机名称分别为:manager1、work1、work2
vim /etc/hostname(修改完成后需要重启)
4、Docker Swarm集群搭建实现
4.1、创建 Docker swarm
在 manager1 机器上创建 docker swarm 集群
docker swarm init --advertise-addr 192.168.200.162
(--advertise-addr将该IP地址的机器设置为集群管理节点;如果是单节点,无需该参数)
查看管理节点集群信息
docker node ls
关闭三台机器的防火墙
systemctl stop firewalld
4.2、向dokcer swarm中添加工作节点:在两个工作节点中分别执行如下命令,ip地址是manager节点
添加两个work节点
docker swarm join --token *** 192.168.200.163:2377 (work1)
docker swarm join --token *** 192.168.200.158:2377 (work2)
(--token xxx:向指定集群中加入工作节点的认证信息,xxx认证信息是在创建docker swarm时产生的)
继续查看管理节点集群信息与之前的区别
docker node ls
5、Docker Swarm部署alpine服务
在 Docker Swarm 集群中部署服务时,既可以使用 Docker Hub 上自带的镜像来启动服务,也可以使用自己通过 Dockerfile 构建的镜像来启动服务。如果使用自己通过 Dockerfile 构建的镜像来启动服务,那么必须先将镜像推送到 Docker Hub 中心仓库。为了方便学习,这里使用 Docker Hub上自带的 alpine 镜像为例来部署集群服务。
5.1、部署服务
docker service create --replicas 1 --name helloworld alpine ping docker.com
docker service create指令:用于在 Swarm 集群中创建一个基于 alpine 镜像的服务
--replicas参数:指定了该服务只有一个副本实例
--name参数:指定创建成功后的服务为helloworld
ping docker.com指令:表示服务启动后执行的命令
5.2、查看 Docker Swarm 集群中的服务
查看服务列表:
docker service ls
查看部署具体服务的详细信息:
docker service inspect 服务名称
查看服务在集群节点上的分配以及运行情况:
docker service ps 服务名称
5.3、修改副本数量
在 manager1 上,更改服务器副本的数量(创建的副本会随机分配到不同的节点)
docker service scale helloworld=5
5.4、删除服务
docker service rm 服务名称
5.5、访问服务
查看集群环境下的网络列表:
docker network ls
在 manager1 上创建一 overlay 为驱动的网络(默认使用的网络连接为ingress)
docker network create -d=overlay my-multi-host-network
在集群管理节点 manager1 上部署一个 nginx 服务
docker service create \
--network my-multi-host-network \
--name my-web \
-p 8080:80 \