什么是Swarm
Swarm 是一個管理Docker集群的工具。Docker Engine 1.12 版本中引入了 swarm 模式,使您能夠創建一個或多個 Docker 引擎組成的集群,稱為 swarm,swarm 由兩種類型節點 manager 和 worker 組成。
- Manager node(管理節點):維護集群狀態,選舉一個leader節點去執行調度任務等。
- Worker node(工作節點):接收和執行任務。
參考文檔:https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
Swarm集群搭建
- 准備三台安裝了docker機器
節點角色 | 名稱 | IP地址 |
---|---|---|
Manager | manager1 | 192.168.20.201 |
Worker | worker1 | 192.168.20.202 |
Worker | worker2 | 192.168.20.203 |
- 在manager1節點運行以下命令來創建一個新的集群
docker swarm init --advertise-addr <MANAGER-IP>
- --advertise-addr:將該IP地址的機器設置為集群管理節點,集群中的其他節點必須能夠通過IP訪問管理節點
示例:
運行docker swarm init
命令后可以看到輸出內容如下,顯示worker和manager加入Swarm集群的命令。
[root@manager1 ~]# docker swarm init --advertise-addr 192.168.20.201
Swarm initialized: current node (tw4es24w9z3vziwv204q54401) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-52qk07cimds6kl64wwsg3jmv0esgrxxhs6eft5rjht7f52h8a7-dvessatunzkhnxs2wc57omyab 192.168.20.201:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
運行docker info
以查看 swarm 的當前狀態:
docker info
運行docker node ls
命令查看節點信息:
[root@manager1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
tw4es24w9z3vziwv204q54401 * manager1 Ready Active Leader 19.03.12
- worker節點加入集群
在worker1和worker2節點運行如下命令加入Swarm:
docker swarm join --token SWMTKN-1-52qk07cimds6kl64wwsg3jmv0esgrxxhs6eft5rjht7f52h8a7-dvessatunzkhnxs2wc57omyab 192.168.20.201:2377
在管理節點manager1,查看集群的節點信息:
[root@manager1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
tw4es24w9z3vziwv204q54401 * manager1 Ready Active Leader 19.03.12
a8z74l8z46bjngnvjk15jctjb worker1 Ready Active 19.03.12
p5210ijqg2g94b6xqug07d4ej worker2 Ready Active 19.03.12
部署服務到Swarm集群
當您將服務部署到 swarm 時,swarm 管理器接受您定義的服務。然后它將集群中節點上的服務作為一個或多個副本任務進行調度。
在管理節點中使用docker service create
命令創建nginx服務:
docker service create --replicas 1 --name mynginx -p 80:80 nginx
- --replicas:指定運行實例的個數
查看集群中的服務:
[root@manager1 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
m1a6i7tqdt7j mynginx replicated 1/1 nginx:latest *:80->80/tcp
訪問manager1、worker1,worker2地址都可以看到成功打開nginx頁面。
常用命令
docker swarm常用命令
查看管理節點和工作節點的token:
docker swarm join-token manager #查看管理節點的 token
docker swarm join-token worker #查看工作節點的 token
Manager節點退出Swarm集群:
docker swarm leave
強制退出需要加 --force
選項
docker swarm leave --force
Worker節點退出Swarm集群,在工作節點運行命令:
docker swarm leave
docker node常用命令
節點降級,由管理節點降級為工作節點:
docker node demote
節點升級,由工作節點升級為管理節點:
docker node promote
刪除節點:
docker node rm
docker service常用命令
查看服務詳情:
docker service inspect
查看服務日志:
docker service logs
更新服務:
docker service update
刪除服務:
docker service rm
設置服務個數:
docker service scale