当你首次安装并开始使用Docker Engine,默认情况下swarm模式是关闭的。当你激活swarm模式,你开始可以使用docker service命令来管理服务。
有两种方法来激活swarm模式:
当你在你本地机器运行docker engine的swarm模式,你可以基于你之前创建的镜像或其它可用镜像来创建和测试服务。在生产环境中,swarm模式提供了集群管理的容错功能来保持你服务一直可用。
本文假设你已经在你机器安装了Docker Engine 1.12或更高版本。
创建一个swarm
当你运行创建swarm的命令,Docker Engine就开始以swarm模式运行了。
执行docker swarm init命令在当前节点创建一个单节点的swarm。Docker Engine设置swarm的步骤为:
docker swarm init命令的输出提供了worker节点加入swarm的命令:
- $ docker swarm init
- Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
- To add a worker to this swarm, run the following command:
- docker swarm join
- –token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
- 192.168.99.100:2377
- To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.
配置advertise地址
管理节点使用一个advertise地址来允许swarm中的其它节点进入Swarmkit API和覆盖网络。其它节点必须能够通过advertise地址连接管理节点。
如果你没有指定一个advertise地址,Docker会检查系统是否只有一个IP地址,如果是,Docker就使用这个IP地址监听2377端口。如果系统有多个IP地址,你就必须指定一个正确的–advertise-addr来启用内部管理间通信和覆盖网络。
- $ docker swarm init –advertise-addr <MANAGER-IP>
注意有时候其它节点连接管理节点的地址不绑定在管理节点本身系统上,即使用ifconfig看不到能用于连接管理节点的地址时,也需要手动指定正确的advertise地址。例如在云服务器中有多个不同的区域,主机有用于内部通过的内部地址和用于外部通过的外部地址。在这种情况下,需要指定其它节点能连接管理节点的地址。
查看join命令或更新swarm join token
节点需要一个秘密token来加入swarm。worker节点用来加入swarm的token与manager节点的token不一样。节点只在加入swarm的时候使用token。当在一个节点加入swarm后更新token不会影响节点的swarm成员资格。更改token只是为了确保其它新的节点不能使用旧的token来尝试加入swarm。
要获取用于worker节点加入swarm的token,执行:
- $ docker swarm join-token worker
- To add a worker to this swarm, run the following command:
- docker swarm join
- –token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
- 192.168.99.100:2377
- This node joined a swarm as a worker.
要获取用于manager节点加入swarm的token,执行:
- $ docker swarm join-token manager
- To add a worker to this swarm, run the following command:
- docker swarm join
- –token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
- 192.168.99.100:2377
传递–quiet参数只打印token:
- $ docker swarm join-token –quiet worker
- SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
我们建议在以下情况来更新token:
除此之外,我们建议你定时的更新token。建议至少6个月更新一个token。
运行swarm join-token –rotate以使旧token无效并生成新token。 指定更新的是worker节点token还是manager节点:
- $docker swarm join-token –rotate worker
- To add a worker to this swarm, run the following command:
- docker swarm join
- –token SWMTKN-1-2kscvs0zuymrsc9t0ocyy1rdns9dhaodvpl639j2bqx55uptag-ebmn5u927reawo27s3azntd44
- 172.17.0.2:2377