一、swarm介绍
Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker。
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。
二、Docker Swarm集群中的角色:
Swarm:作用于运行docker engine(引擎)的多个主机组成的集群。
node:每一个docker engine都是一个node(节点),分为manager和worker。
manager node:负责执行容器的编排和集群的管理工作,保持并维护swarm处于期望的状态。swarm可以有多个manager node,它们会自动协调并选举出一个Leader执行编排任务。但相反,不能没有manager node。
worker node:接受并执行由manager node派发的任务,并且默认manager node也是一个work node,不过可以将它设置为manager-only node,让它只负责编排和管理工作。
service:用来定义worker上执行的命令。
三、swarm集群部署
1.环境需求
各个主机服务器自带docker
主机名 | IP地址 |
node1 | 192.174.1.43 |
node2 | 192.174.1.44 |
node3 | 192.174.1.45 |
2.免密登录
vim /etc/hosts
192.174.1.43 node1
192.174.1.44 node2
192.174.1.45 node3
ssh-keygen -t rsa (这三台主机都需要做)
ssh-copy-id -i node1/node2
3.开启允许的端口
firewall-cmd --add-port={2377,7946,4789}/tcp --permanent
firewall-cmd --add-port={7946,4789}/udp --permanent
firewall-cmd --reload
4.构建一份私有仓库(原因是 在公司都是以私有仓库镜像进行使用,保证安全)
1.下载私有仓库软件
docker pull registry:2
docker run -dit -p 5000:5000 --restart always -v /opt/data/registry/:/var/lib/registry --name registry registry:2
2.修改配置文件
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=192.174.1.43:5000 -H fd:// --containerd=/run/containerd/containerd.sock
(另外两台也需要修改)
3.重启
systemctl daemon-reload
systemctl restart docker
4.给镜像打标签
docker tag httpd:latest 192.174.1.43:5000/httpd
docker tag busybox:latest 192.174.1.43:5000/busybox
5.上传镜像
docker push 192.174.1.43:5000/httpd:latest
docker push 192.174.1.43:5000/busybox:latest
6.查看是否上传成功
curl node1:5000/v2/_catalog
5.初始化docker swarm
docker swarm init --advertise-addr 192.174.1.43
当执行完上面的命令时,会返回上面的信息,这些信息提示信息给出的是,如果其他节点需要加入此节点,需要执行的命令,直接复制,对其主机执行即可加入集群
①、想让某台主机是manager输入:
docker swarm join-token manager
②、想查看swarm join
docker swarm join-token worker
③、加入另外两台节点:
docker swarm join --token SWMTKN-1-3rwx2uovyoq7lkv5lum3h5jij8psyipy3bgegbhldh67jfxtlp-bxd97reas6v3utuo3jb81b4ci 192.174.1.43:2377
④、查看节点有哪些:
docker node ls
⑤、将docker02提升/去除为manager node
docker node promote node2 (添加)
docker node demote node2 (去除)
6、添加可视化工具
dockersamples/visualizer
docker run -dit -p 8888:8080 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock 192.174.1.43:5000/dockersamples/visualizer:latest
7.创建服务
docker service create --name web_server 192.174.1.43:5000/httpd (启动一个)
docker service create --replicas 3 -p 80:80 --name web_server httpd:latest (启动三个并绑定端口)
docker service scale web_server=5(扩展到5个)
docker service scale web_server=3(减少到3个)
查看运行所有:
从swarm群集查看节点:
8.设置某台服务器只充当manager 不工作
docker node update --availability drain node1
9.更新增加端口
docker service update --publish-add 8080:80 web_server
四、命令总结:
离开集群:
docker swarm leave
删除节点:
docker node rm node02 #这里注意,只有申请离开集群的node才可以删除。
生成令牌,可以是manager身份或worker身份:
docker swarm join-token [manager | worker]
降级为work与升级为manager:
docker node demote(降级):将swarm节点的manager降级为work
docker node promote(升级):将swarm节点的work升级为manager
Service基础命令:
查看service列表:
docker service ls
查看service信息:
docker service ps xxx
增加容器与减少容器:
docker service scale web1=5
docker service scale web1=3 #等号后接容器的数量。
设置manager node不参加工作:
docker node update node01 --availability drain
可以设置三个参数:
active"|"pause"|"drain #活跃”|“暂停”|“不工作
更新端口数据配置:
docker service update --publish-add 8080:80 web_server