1.1 使用Docker Swarm搭建集群
官方文档:https://docs.docker.com/engine/swarm/swarm-tutorial/
1.1.1 准备三台虚拟机
192.168.56.99 (hostname: swarm-manager)作为swarm manager
192.168.56.10 (hostname: swarm-worker1)作为swarm agent1
192.168.56.11 (hostname: swarm-worker2)作为swarm agent2
#修改虚拟机hostname命令: hostnamectl --static set-hostname swarm-manager hostnamectl status #开放相关端口 firewall-cmd --zone=public --add-port=2377/tcp --permanent && \ firewall-cmd --zone=public --add-port=7946/tcp --permanent && \ firewall-cmd --zone=public --add-port=7946/udp --permanent && \ firewall-cmd --zone=public --add-port=4789/tcp --permanent && \ firewall-cmd --zone=public --add-port=4789/udp --permanent && \ firewall-cmd --reload
1.1.2 创建一个虚拟机作为 manger 节点
docker swarm init --listen-addr 0.0.0.0 --advertise-addr 192.168.56.99 docker swarm join-token manager #查看加入为swarm manager的token docker swarm join-token worker #查看加入为swarm worker的token
1.1.3 另外两个虚拟机作为worker节点
docker swarm join \ --token SWMTKN-1-4544tttduruaww6toemdp3rxr5cnbp6tqqz9n8ej11g2x3sxzd-ax6ok1jwje314qi68e1xdjeio \ 192.168.56.99:2377
1.1.4 在Manager上查看docker swarm的节点
docker node ls
1.1.5 Swarm Work脱离集群,并加入Manager
docker swarm leave #脱离集群 docker swarm join \ --token SWMTKN-1-4544tttduruaww6toemdp3rxr5cnbp6tqqz9n8ej11g2x3sxzd-ax6ok1jwje314qi68e1xdjeio \ 192.168.56.99:2377
1.1.6 删除Swarm Work
docker swarm leave #脱离集群 docker node rm nodeid #在Mananger上使用命令:docker node ls查看
1.1.7 建立跨主机网络
docker network ls #查看现有的网络
docker network inspect ingress #查看现有的网络情况
docker network create --subnet=10.0.9.0/24 --driver overlay swarm-network
--subnet 用于指定创建overlay网络的网段,也可以省略此参数
1.1.8 在网络上运行容器
docker service create --name test-ping --replicas 2 --network=swarm-network alpine ping baidu.com docker service ps test-ping #查看Swarm中的运行容器
1.1.9 扩展应用(Scaling)
docker service scale test-ping=4
1.1.10 对service服务进行指定运行
docker service create --network swarm-network --name idoall-org --constraint 'node.hostname==c4' -p 9000:9000 testweb
1.1.11 测试docker swarm网络是否能互通
在mananger上执行
docker ps docker exec -it ba8b sh
其中:test-ping.1.np2cl2hq02tal9iaysl6i02th是worker1中的运行名称
1.1.12 测试dokcer swarm自带的负载均衡
docker service create --name whoami --mode global -p 8000:8000 jwilder/whoami docker service ps whoami
在任意一台机器上执行以下命令,可以发现,每次获取到的都是不同的值,超过4次以后,会继续轮询到第1台机器
curl $(hostname --all-ip-addresses | awk '{print $1}'):8000
1.1.13 删除正在运行的Service
docker service rm test-ping
1.1.14 相关资料
Docker Swarm 介绍:https://www.cnblogs.com/ityouknow/p/8903975.html
https://www.cnblogs.com/jsonhc/p/7784466.html
https://www.cnblogs.com/lion.net/p/6160548.html
https://www.jianshu.com/p/9eb9995884a5
使用NGINX和NGINX Plus进行Docker Swarm负载均衡:http://dockone.io/article/2050