建立群集
一个群由多个节点组成,可以是物理机或虚拟机。基本的概念很简单:运行docker swarm init来启用swarm模式,并让你的当前机器成为swarm manager,然后在其他机器上运行docker swarm join让它们作为worker(从机)加入swarm。
具体步骤如下:
(1)在swarm manager(集群管理机)上执行
#docker swarm init
Swarm initialized: current node (udsskjm1xcmwrhnukfu9k3xze) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-2jqmzukum85nfuaipg9gw3zv8jzwv71kx9ls54xazmm6gvpnfm-5y1cwboulbsznmldko99m24od 10.0.0.38:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
说明:在管理机上执行docker swarm init后,系统会产生如上的内容和docker swarm join的信息,但是,如果我们不是立即将从机加入集群中,那么我们应该如何得到这个信息呢?
##执行如下命令:
##在leader主机上运行
#docker swarm join-token manager
返回:
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-67up8rqnbpt7dq83icrgexr7lc5l1dofjcjk8onhjhfv9cit9g-5xacj7evi09tuj2cs9jlj6wjp 10.0.0.38:2377
(2)在worker(从机)上执行
#docker swarm join --token SWMTKN-1-2jqmzukum85nfuaipg9gw3zv8jzwv71kx9ls54xazmm6gvpnfm-5y1cwboulbsznmldko99m24od 10.0.0.38:2377
返回:This node joined a swarm as a worker.
(3)在swarm manager(集群管理机)上查看集群情况
#docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
udsskjm1xcmwrhnukfu9k3xze * swarm1 Ready Active Leader
ybjg2rrdxlg07gh5ouwub8155 swarm2 Ready Active
离开集群
如果你想重新开始,你可以从每个节点运行docker swarm leave。
说明:如果在管理机上执行docker swarm leave,则:
#docker swarm leave --force
Node left the swarm.
[root@swarm1 ~]# docker node ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
在从机上运行:docker swarm leave
在主机(manage)上查看:
# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
i0hkvoybv632ajec28fi5h31e * swarm1 Ready Active Leader
t8qw0gq2ny3o4uwr3mt8xhgs7 swarm2 Down Active
在群集上部署应用程序
两台机器分别是swarm1(10.0.0.38)和swarm2 (10.0.0.39)
具体步骤如下:
(1)swarm1是主机(manage),在其上执行:docker swarm init
(2)swarm2是从机添加进集群中,在其上执行:
#docker swarm join --token SWMTKN-1-38m4cy1jwkoi6z9nna8xbvjslksphss635gkgmkr6l0kifryn5-c4ea9yazu2m2ag20j477kxqli 10.0.0.38:2377
(3)在主机(manage)上执行:
#docker stack deploy -c docker-compose.yml getstartedlab
(4)在主机(manage)上执行:docker stack ps getstartedlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
8uppaqhfm8fg getstartedlab_web.1 friendlyhello:latest swarm1 Running Running 34 seconds ago
rx3j05fhyzvg getstartedlab_web.2 friendlyhello:latest swarm2 Running Running 33 seconds ago
n6c91tcej3ox getstartedlab_web.3 friendlyhello:latest swarm1 Running Running 34 seconds ago
uov66tw8ou4k getstartedlab_web.4 friendlyhello:latest swarm2 Running Running 34 seconds ago
5qlijwxe8obg getstartedlab_web.5 friendlyhello:latest swarm2 Running Running 32 seconds ago
注意:swarm1与swarm2上必须都有镜像friendlyhello:latest