提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
Docker Swarm 是 Docker 原生的一个集群工具,它可以把多个 Docker 主机转化为单一的虚拟 Docker 主机。
一、swarm及特点是什么?
- Docker Swarm 是 Docker原生的一个集群工具,安装搭建由于是原生,所有无需下载安装其他第三方软件工具进行支持,因此搭建方便快捷。
- 它可以把多个 Docker 主机转化为单一的虚拟 Docker主机,意思简单理解为swarm可以管理并操作多台主机的容器像操作单台主机的容器一样的简单。把主机称为节点,节点分为manager节点和worker节点,并且可以通过一台manager节点操控自身和其他所有worker节点的容器,可以非常方便的管理,同时swarm提供了集群可用性机制。
二、安装步骤
1.准备服务器
-
这里准备两台centos7/8服务器
服务器1 : 192.168.0.87
服务器2 : 192.168.0.102 -
对于swarm,每台服务器作为节点node,分为manager和worker节点,manager用于管理所有的节点以及所有的容器,worker用于一个或者多个容器来运行应用,其实manager同样可以用来运行应用,其实swarm使用比较灵活,根据自己的实际情况来决定,这里使用2台服务器进行搭建。
-
服务器1 : 192.168.0.87 --作为manager和worker
服务器2 : 192.168.0.102-作为worker
2.安装docker 和 swarm 搭建(192.168.0.87)
-
首先安装docker
#安装 yum install -y yum-utils device-mapper-persistent-data yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce-18.06.1* #关闭防火墙 systemctl stop firewalld #禁用防火墙 systemctl disable firewalld #启动docker服务 service docker start #开机自启 chkconfig docker on
-
搭建swarm,由于安装docker自带因此无需另外安装,直接开始
#将192.168.0.87主机(本机)作为manager [root@ecs-bf92-0002 ~]# docker swarm init Swarm initialized: current node (swdt9g2tkz2muvfqy73mqis9f) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-5t55zue9sywh1qtghrr7sau7fokht6qc1212m8psu672ycdevg-cqraijau1518any7btqwicy74 192.168.0.87:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. #设置本主机在swarm中的节点名称“node1” ecs-bf92-0002为本机hostname [root@ecs-bf92-0002 ~]# docker node update --label-add tagName=node1 ecs-bf92-0002
-
搭建overlay网络模式
docker network create -d overlay --subnet=10.10.0.0/16 --gateway=10.10.0.1 --attachable=true xx_overlay
overlay 网络模式为swarm下的不同主机的不同容器分配虚拟ip,同时可以让容器之间进行跨主机通信
3.安装docker 和 swarm 搭建(192.168.0.102)
-
首先安装docker
#安装 yum install -y yum-utils device-mapper-persistent-data yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce-18.06.1* #关闭防火墙 systemctl stop firewalld #禁用防火墙 systemctl disable firewalld #启动docker服务 service docker start #开机自启 chkconfig docker on
-
搭建swarm
[root@ecs-bf92-0001 ~]# docker swarm join --token SWMTKN-1-5t55zue9sywh1qtghrr7sau7fokht6qc1212m8psu672ycdevg-cqraijau1518any7btqwicy74 192.168.0.87:2377 This node joined a swarm as a worker. [root@ecs-bf92-0001 ~]#
192.168.0.102作为worker节点,无需执行docker swarm init命令,根据192.168.0.87执行docker swarm init生成的docker swarm join --token SWMTKN-1-5t55zue9sywh1qtghrr7sau7fokht6qc1212m8psu672ycdevg-cqraijau1518any7btqwicy74 192.168.0.87:2377,执行后加入manger即可
-
进入192.168.0.87 manager节点服务器中,设置节点名称,worker无法执行swarm命令
#设置本主机在swarm中的节点名称“node2” ecs-bf92-0001为本机hostname [root@ecs-bf92-0002 ~]# docker node update --label-add tagName=node2 ecs-bf92-0001
4.swarm使用
-
在manager查看节点状态
[root@ecs-bf92-0002 ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION 7lssva90bw7k9ic30gfovzupx ecs-bf92-0001 Ready Active 18.06.1-ce swdt9g2tkz2muvfqy73mqis9f * ecs-bf92-0002 Ready Active Leader 18.06.1-ce [root@ecs-bf92-0002 ~]#
-
在manager中创建容器
意思可以理解为在manager节点中可以在自身服务器中和其他任何worker节点的服务器环境中创建节点,如在192.168.0.87 和 192.168.0.102两个服务器中
docker service create --network=xx_overlay \ --log-driver="none" \ --constraint 'node.labels.tagName == node1' \ --mount type=bind,source=/docker/logs/xxx-proxy,target=/logs \ --name="xxx-proxy" --host nacos:10.10.1.99 \ -e "spring.profiles.active=prod" \ registry.cn-shanghai.aliyuncs.com/xxxx/xxx-proxy:1.0.10-SNAPSHOT
1.swarm 以 docker service 方式进行启动,与docker run 方式其实差不多,只是命令稍微有点区别
2.–network 为上面创建的网络方式的名称
3.–constraint ‘node.labels.tagName == node1’ 在manager节点中执行可以指定该容器安装在哪个节点上
4.–host nacos:10.10.1.99 设置dns映射关系