教程

Swarm Mode部署

Swarm简介

Swarm 是Docker的原生集群工具,Swarm使用标准的Docker API,这意味着容器能够使用 docker run 命令启动,Swarm会选择合适的主机来运行容器,这也意味着其他使用Docker API的工具比如 Compose 和 bespoke脚本 也能使用Swarm,从而利用集群而不是在单个主机上运行。

Swarm的基本架构很简单:每个主机运行一个Swarm代理,一个主机运行Swarm管理器(在测试的集群中,这个主机也可以运行代理),这个管理器负责主机上容器的编排和调度。Swarm能以高可用性模式(etcd 、 Consul 或 ZooKeeper 中任何一个都可以用来将故障转移给后备管理器处理)运行。当有新主机加入到集群,有几种不同的方式来发现新加的主机,在Swarm中也就是 discovery 。默认情况下使用的是token,也就是在Docker Hub上会储存一个主机地址的列表。

部署Swarm Mode

部署Swarm Mode之前,您需绑定Docker到指定TCP端口,参考:Compose应用->资源池配置

本文档以ubuntu 14.04操作系统为例,在172.16.17.11、192.168.17.124两台主机上部署Swarm Mode。其中172.16.17.11为主节点,192.168.17.124为子节点。

  1. 在172.16.17.11上执行如下命令设置172.16.17.11为manage。

    docker swarm init --listen-addr 172.16.17.11
    docker swarm join-token --rotate worker

    可以看到如下信息

    Successfully rotated worker join token.
    To add a worker to this swarm, run the following command:
    docker swarm join —token SWMTKN-1-0velpgoh1rgws30497sm55az01darmlji77hembfrxtkafirvq-0zybv26gbvstngl4cyk5py5u3 172.16.17.11:2377

  2. 在192.168.17.124上执行上一步输出的命令,将192.168.17.124加入到swarm mode作为worker。此处为:

    docker swarm join --token SWMTKN-1-0velpgoh1rgws30497sm55az01darmlji77hembfrxtkafirvq-0zybv26gbvstngl4cyk5py5u3 172.16.17.11:2377

    如下图看到This node joined a swarm as a worker表示加入成功。如果添加失败,请参考附录->常见问题解答问题13:Swarm_Mode添加worker节点报错解决办法。

    swarmaddworker

  3. 在主节点172.16.17.11上执行如下命令查看Swarm Mode的节点列表。

    docker node ls

    可以看到类似如下信息:

    swarmnodelist

    备注:
    如果您需要删除某一个worker节点,您可以在主节点172.16.17.11上执行如下命令,您需将节点ID替换成具体节点的ID。节点ID可通过docker node ls命令查看。

    docker node rm [节点ID]

    e.g.:

    swarmnoderm