# Swarm 集群

## 创建Swarm 集群

```
$ docker swarm init
```

`--listen-addr ip : port`- 管理者节点

`advertise-addr ip`- 广播地址

## 加入Swarm 集群

```
$ docker swarm join-token manager
$ docker swarm join-token worker
```

添加manager或者worker节点到集群，只要执行对应的命令即可。

在创建的创建Swarm 集群的机器上，执行以下命令，会生成响应的执行命令，只需要在响应的机器上运行即可，就可以加入奥这个swarm集群。

![](https://3836016457-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT3088lKmAdd7HarJ%2F-LfnT7osh8cvAGaoM3Y9%2F-LfnTJlB9u59zXg2KdSy%2F1.png?generation=1558862984082391\&alt=media)

## 查看swarm集群节点

```
$ docker node ls
```

只可以在Manager节点执行命令

## 创建共享网络

如果不同主机容器和容器之间业务通讯，还需要创建一个新的共享网络。

```
$ docker network ls 
$ docker network create -d overlay --attachable swarm_test
```

ingress网络仅用于管理Swarm集群，所以我们需要创建新的共享网络。

搞定之后就可以部署各种各样的集群了。比如PXC集群，只需要`--net=swarm_test`即可。

## 退出Swarm集群

* **主动退出Swarm集群：**

```
$ docker swarm leave --force
```

Manager 退出集群必须要使用`--force`参数,Work节点z直接执行`docker swarm leave`即可

* **被动退出Swarm集群：**

宿主机执行

如果manager节点想要退出集群

```
$ docker node ls
$ docker node demot 节点名字
$ docker stop node1
$ docker rm node1
$ service docker stop
$ docker node rm 节点名字
$ docker node ls
```

删除任何的节点必须要先停止它的Dokcer服务

Manager节点必须先降级成Worker节点，然后再去删除。

> 解除docker集群（解除docker集群，网络自动消失`docker network ls`查看）
>
> ```
> $ docker swarm leave -f
> $ docker network ls
> $ docker network rm docker_gwbridge
> ```

## 资料

[【Docker】 Swarm简单介绍](https://www.cnblogs.com/franknihao/p/8490416.html)
