1:什么是Docker Swarm
Swarm是Docker公司推出的用来管理docker集群的平台,Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合
2:Docker Swarm的几个概念
2.1:Swarm
是用来管理docker机器集群的管理和编排,可以在docker初始化时启动swarm模式或者加入已存在的swarm
2.2:Node:
一个节点是docker引擎集群的一个实例。您还可以将其视为Docker节点。您可以在单个物理计算机或云服务器上运行一个或多个节点,
但生产群集部署通常包括分布在多个物理和云计算机上的Docker节点。
要将应用程序部署到swarm,请将服务定义提交给 管理器节点。管理器节点将称为任务的工作单元分派 给工作节点。
Manager节点还执行维护所需群集状态所需的编排和集群管理功能。Manager节点选择单个领导者来执行编排任务。
工作节点接收并执行从管理器节点分派的任务。默认情况下,管理器节点还将服务作为工作节点运行,
但您可以将它们配置为仅运行管理器任务并且是仅管理器节点。
代理程序在每个工作程序节点上运行,并报告分配给它的任务。工作节点向管理器节点通知其分配的任务的当前状态,
以便管理器可以维持每个工作者的期望状态。
2.3:Service
一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。创建服务时,你需要指定要使用的容器镜像。
2.4:Task
任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点.
3:集群的创建
3.1:准备3台虚拟机
node1:192.168.195.10 master
node2:192.168.195.11 worker
node3:192.168.195.12 worker
以上3台机器实现一主二从的集群模式
3.2:关闭三台虚拟机的防火墙或者开放
关闭三台机器上的防火墙。如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)端口。
关闭防火墙的命令:
systemctl disable firewalld.service
systemctl stop firewalld.service
3.3:在192.168.195.10 虚拟机上使用如下命令创建集群
docker swarm init --advertise-addr 192.168.195.10
执行完成后得到如下图所示的加入集群的命令行 分别 在192.168.195.11,192.168.195.12
机器上执行如图所示红线部分的命令 即可加入集群
4:通过docker node ls 来查看集群是否成功 如出现如下图所示则表示创建集群成功
5:docker-swarm 常用命令
5.1: 初始化集群环境
docker swarm init --advertise-addr 192.168.31.43
5.2:这里的leave就是在集群中删除节点,-f参数强制删除,执行完在重新执行O
docker swarm leave -f
5.3:查看集群的相关信息
docker info
5.4:上面的命令是查看集群中的机器(注意上面node ID旁边那个*号表示现在连接到这个节点上)
docker node ls
5.5:加入集群节点 作为工作节点
docker swarm join --token SWMTKN-1-2lefzq18zohy9yr1vskutf1sfb2a590xz9d0mjj2m15zu9eprw-2938j5f50t35ycut0vbj2sx0s 192.168.195.10:2377
5.6:查看加入集群节点的ml
docker swarm join-token manager
5.7:上线某个节点
docker node update --availability active node1
5.8:active 和drain状态的区别
swarm集群中node的availability状态可以为 active或者drain,其中:
active状态下,node可以接受来自manager节点的任务分派;
drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)
6:部署服务(部署nginx)
6.1:创建网络服务命令
docker network create -d overlay nginx_net
注 :在docker-swarm的模式下是基于overlay的网络模式组成的节点互通
如果不创建网络,则docker-swarm会使用自己默认的overlay网络模式
6.2:查看网络命令:
# 查看网络
docker network ls
# 查看某个网络信息
docker network ls | grep nginx_net
6.3:部署服务命令:
# 部署服务 --replicas 1 表示部署一个nginx实例
docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx
# 查看正在运行服务的列表
docker service ls
# 查询Swarm中服务的信息
docker service inspect --pretty my_nginx
# 查询到哪个节点正在运行该服务。如下该容器被调度到manager-node节点上启动了
docker service ps my_nginx
# 修改服务运行参数命令
docker service update --replicas 3 my_nginx
# 升级镜像
docker service update --image nginx:new my_nginx
# 删除镜像
docker service rm my_nginx
# 目录挂载 创建挂载目录
docker volume create --name testvolume
# 查看创建挂在卷
docker volume ls
# 查看volume详情
docker volume inspect testvolume
7:docker-swarm 多服务
3个服务(tomcat服务,nginx服务,web应用)三个服务
1)创建工作目录
mkdir /home/docker
2)进入到docker目录下创建docker-compose.yml
vi docker-compose.yml
内容如下:
version: "3.8"
services:
nginx:
image: nginx
ports:
- 8888:80
deploy:
mode: replicated
replocas: 3
tomcat:
image: tomcat:8
ports:
8080:8080
deploy:
mode: replicated
replocas: 2
通过这个yml文件部署服务
docker stack deploy -c docker-compose.yml deploy_deamon
执行完上面结果如下所示:
Creating network deploy_deamon_default
Creating service deploy_deamon_nginx
Creating service deploy_deamon_tomcat