# Swarm 安装使用

![](https://2134947750-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvILwbD2PrkBCkSitM3m4%2Fuploads%2F2qjhkcVOAld2YDeRYOTc%2F1183448-20181110143509658-2015710554.png?alt=media\&token=143363c8-976c-4499-81b7-74c74f507116)



> docker 1.12 版本后都自带 swarm 命令，无需安装；更多内容 docker swarm --help \
> docker 安装略，参考 'docker分类' 中 docker 几种方式，推荐源码安装

### 环境

```bash
[root@swarm-1 ~]# cat /etc/hosts     # 其他节点统一 hosts 内容
'''
10.10.181.249 swarm-1
10.10.181.248 swarm-2
10.10.181.246 swarm-3
```

### 1、初始化集群

```bash
# 需要开放：TCP 端口 2377：用于集群管理通信；
# 需要开放：TCP 和 UDP 端口 7946：用于节点之间通信
# 需要开放：UDP 端口 4789：overlay 网络流量
# 多块网卡： 必须使用--advertise-addr指定IP。
# 暴漏给外界调用socket 地址： --listen-addr， 默认 2377
docker swarm init --advertise-addr 10.10.181.249

"""
	Swarm initialized: current node (4i8ii9h7gdoyo3owkyt97dd10) is now a manager.

	To add a worker to this swarm, run the following command:

	    docker swarm join --token SWMTKN-1-15g0or6yr285yunncbjqlwxippgee3m44wjp0hm6z9cokx7opr-63p3p1is1075okeg6ngy170l8 10.10.181.249:2377

	To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
"""
```

### 2、增加节点

```bash
docker swarm join --token SWMTKN-1-15g0or6yr285yunncbjqlwxippgee3m44wjp0hm6z9cokx7opr-63p3p1is1075okeg6ngy170l8 10.10.181.249:2377
```

### 3、提升为高可用

```bash
# 从 worker 节点中提升为管理节点, 考虑到高可用，最好管理节点为奇数，最少为3个管理节点
docker node promote swarm-2 swarm-3
"""
	[root@localhost ~]# docker node ls
	ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
	4i8ii9h7gdoyo3owkyt97dd10 *   swarm-1             Ready               Active              Leader              19.03.9
	s6dr5w04tnnbkozdlzjus7e6i     swarm-2             Ready               Active              Reachable           19.03.9
	x0mw6qwgoaul3qtlhqrmm6b0d     swarm-3             Ready               Active              Reachable           19.03.9
"""
# 这里可以测试一下，主关机后，是否可以正常运行
```

### 4、新建服务

```bash
docker service create --replicas 1 -p 80:80 --name nginx nginx:latest
```

### 5、升级、降低副本

```bash
docker service scale nginx=50
```

### 6、查看日志

```bash
docker service logs nginx
```

### 7、删除服务

```bash
docker service rm nginx
```

### 8、图形化

<pre class="language-bash"><code class="lang-bash"># &#x3C;了解一下即可>
docker search portainer
docker pull portainer/portainer

# 基于docker运行
docker run -d -p 9000:9000 \
--name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
<strong>-v portainer_data:/data \
</strong>portainer/portainer

# 基于 swarm 运行，这里没有指定运行在管理节点，后面再优化，节目操作必须在管理节点
docker service create -p 9000:9000 --replicas 1 \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=volume,src=portainer_data,dst=/data \
portainer/portainer
# 浏览器访问：http://IP:9000
</code></pre>
