我的三台测试机
IP 角色
192.168.56.104 manager
192.168.56.103 worker
192.168.56.101 worker
在创建集群前,如果开启了防火墙,请确认三台主机的防火墙能让swarm需求的端口开放,需要打开主机之间的端口,以下端口必须可用。在某些系统上,这些端口默认为打开。
2377:TCP端口2377用于集群管理通信
7946:TCP和UDP端口7946用于节点之间的通信
4789:TCP和UDP端口4789用于覆盖网络流量
可以直接禁用系统防火墙来让这些端口通信不受限制,一般测试环境我们都会禁用防火墙。
systemctl stop firewalld(立即生效)
systemctl disable firewalld(重启生效)
docker环境请自行安装。
常用命令
在Docker Swarm中经常使用的主要有docker swarm、docker node、docker service、docker stack。
初始化swarm
1、在主节点 上执行初始化命令:
docker swarm init --advertise-addr 192.168.56.104(本机IP)
2、在其它两台worker主机上(192.168.56.103、192.168.56.101)分别执行加入swarm:
[root@swarm-m ~]# docker swarm init --advertise-addr 172.16.10.85
Swarm initialized: current node (mclobj2doj65sek345mjkklfo) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-42w2dmkv2u18k9d6vi65rhqggjcqcc31iijnecd4bbi43bmom2-b3o89g28thkcken0v3qxtczuj 192.168.56.104:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
3、如果后续我们有新的主机被当做manager、worker节点想要加入到集群中来,但要不记得当时创建集群时的token,在manager主机上执行以下命令:
docker swarm join-token manager
docker swarm join-token worker
4、在192.168.56.104 上执行查看swarm的节点:
[root@bogon ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
h27qpxwdkbyk2klzxkylnngqq * bogon Ready Active Leader 19.03.6
je93cexkvsamc570oka2z3klr bogon Ready Active 19.03.6
rxv8ufik1xbz8nn6k11c6o80y bogon Ready Active 19.03.7
5、在192.168.56.104 上执行创建自定义的overlay网络:
docker network create --driver overlay --subnet 10.10.10.0/16 my-overlay-network
6、在192.168.56.104 上执行查询swarm网络 docker network ls
[root@bogon ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
dc78e9edb3d3 bridge bridge local
1f265a30c04e dce_default bridge local
9dbc4cf0feb2 docker_gwbridge bridge local
ce3d745391ab home_default bridge local
7c890d873cfd host host local
sr0o2r1ru1pl ingress overlay swarm
nh1arm6lljgf my-overlay-network overlay swarm
106be1ff3e39 none null local
b42e0d40642a zoo_kafka bridge local
7、创建一个nginx service
docker pull daocloud.io/nginx
8、执行命令创建service:
docker service create --name webapp-nginx --replicas 3 --network my-overlay-network --publish 8089:80 daocloud.io/nginx
docker service create中的参数:
–name 服务名
–replicas 是创建的副本的数量
–network 是使用的网络
–publish 是服务公开的端口 :
9、查看webapp-nginx服务任务分配到的节点
docker service ps webapp-nginx
10、外部访问公开端口8089
http://192.168.56.104:8089
http://192.168.56.103:8089
http://192.168.56.101:8089