1:首先在各节点上安装最新版dokcer
# curl -fsSL https://test.docker.com/ | sh
# docker -v
Docker version 1.12.0-rc4, build e4a0dbc
2:在node1上初始化一个swarm集群
swarm_node1:
[root@swarm_node1 ~]# docker swarm init
No --secret provided. Generated random secret:
dm18yjza2eb00wsbbk1hleq8q
Swarm initialized: current node (4abdf6see9vqr83emyhdf529s) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --secret dm18yjza2eb00wsbbk1hleq8q \
--ca-hash sha256:cda112fa02a5c17850852b4d65366bb8484bcb204a46ae97063648b5545e277d \
192.168.1.131:2377
3:根据提示,把node2添加进swarm集群
swarm_node2:
[root@swarm_node2 ~]# docker swarm join --secret dm18yjza2eb00wsbbk1hleq8q --ca-hash sha256:cda112fa02a5c17850852b4d65366bb8484bcb204a46ae97063648b5545e277d 192.168.1.131:2377
This node joined a Swarm as a worker. 提示节点添加成功。
1.12新增了service命令,用于管理一个服务。例如我们需要一个test的服务,需要两个容器,运行ping的命令:
[root@swarm_node1 ~]# docker service create --name test --replicas 2 centos ping 127.0.0.1
bgach5ib1uoubo2ljarrx48xu
[root@swarm_node1 ~]# docker service ls
ID NAME REPLICAS IMAGE COMMAND
bgach5ib1uou test 0/2 centos ping 127.0.0.1
[root@swarm_node1 ~]# docker service tasks test
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
5rw3fr6xdl3kojhh28qzg8yos test.1 test centos Preparing 21 seconds ago Running swarm_node1
1l9siyzbflljowd543c5ehdil test.2 test centos Preparing 21 seconds ago Running swarm_node2 --repicas 2指定了服务的个数为2,可以看到在node1,node2上分别跑了一个容器,组成了一个test的服务。
6:service的错误恢复与容器迁移。
service的新特性最大的亮点是错误迁移与恢复的机制,如果某一个节点上的docker服务下线了,或者服务器出现故障,swarm集群会检测service是否发生变动,如果发现某个节点故障,会在另外的节点恢复容器,以保证service的完整。
比如,这时,我让swarm_node2退出swarm集群:
[root@swarm_node2 ~]# docker swarm leave
Node left the swarm. 再查看test服务:
[root@swarm_node1 ~]# docker service tasks test
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
5rw3fr6xdl3kojhh28qzg8yos test.1 test centos Preparing 5 minutes ago Running swarm_node1
9pzt555uzeswik14lj6bp96hf test.2 test centos Preparing about a minute ago Running swarm_node1 可以看到test这个服务依旧保持了2个容器,而且由于node2已经下线,容器全部迁移到了node1。