> For the complete documentation index, see [llms.txt](https://anida-huang.gitbook.io/cloud-communication/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://anida-huang.gitbook.io/cloud-communication/qi-mo/docker-swarm.md).

# 20201117 docker swarm (一)

## 課堂資訊

{% embed url="<https://github.com/twtrubiks/docker-swarm-tutorial#docker-machine-%E6%95%99%E5%AD%B8>" %}

{% embed url="<https://kawsing.gitbook.io/opensystem/>" %}

### 新增虛擬機

> #### 設定虛擬機 hostname

```
hostnamectl set-hostname [虛擬機名稱]
```

```
bash
```

```
ifconfig
```

```
vim /etc/hosts
```

```
192.168.8.129 vm1
192.168.8.130 vm2
192.168.8.131 vm3
```

{% tabs %}
{% tab title="vm1" %}
![](/files/-MNRvpSNXpd-sNvGxvjd)
{% endtab %}

{% tab title="vm2" %}
![](/files/-MNRvTeVRxMfQogqm4nK)
{% endtab %}

{% tab title="vm3" %}
![](/files/-MNRv6rNjMD2rwLKYs6i)
{% endtab %}
{% endtabs %}

### Docker Swarm

![docker swarm 中，主要的就是 managers and workers](/files/-MOrfjt4rmeXgmmT-m6e)

![docker swarm 內建的 Loan Balance + Routing Mesh會將 request route 到正在運行的 container 上](/files/-MOrfD4XiN8GKRL0SMu9)

![](/files/-MOrzaWIrLCm44pm2fr9)

## 課堂練習

### Docker Swarm

> #### check firewall

```
systemctl status firewalld
```

```
getenforce
```

{% tabs %}
{% tab title="vm1" %}

> #### 初始化 docker swarm

```
docker swarm init --advertise-addr 192.168.8.129
```

{% hint style="info" %}
複製&#x5230;**`vm2`、`vm3`**

```
docker swarm join --token SWMTKN-1-3yzvicajz4c2kyohfzr8zpzuu7jw17jtxz2wf7k2d12nwvq4av-0l3b8c5vwsy12x6m1gupxwuf6 192.168.8.129:2377
```

{% endhint %}

![](/files/-MOrTpTtetBqs-0yRDEM)

```
docker node ls
```

```
docker swarm join-token manager
```

{% hint style="success" %}
執行時會顯示 token

```
docker swarm join --token SWMTKN-1-3yzvicajz4c2kyohfzr8zpzuu7jw17jtxz2wf7k2d12nwvq4av-96ni9b32xo6ngxyscud232nqo 192.168.8.129:2377
```

{% endhint %}

> #### 將`vm2`promote 為 manager

```
docker node promote vm2
```

![](/files/-MOrVQQp07rgVMEfvi0-)

> #### 離開 swarm

```
docker swarm leave -f
```

> #### Update a node

```
docker node update --availability drain vm1
```

```
docker pull dockersamples/visualizer
```

![](/files/-MOrXzpXdTARqE8TJEuF)

```
docker run -itd -p 8888:8080 -e HOST=192.168.8.129 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer
```

![](/files/-MOrZj9ytDLqQrk3nokj)

![](/files/-MOr_27C5y3XCDUu2O9h)

> #### 部署Web服務器服務

```
docker service create --name myweb -p 8880:80 httpd
```

```
docker service ls
```

![](/files/-MOr_zxiJv4eNkGjrPBO)

![](/files/-MOra3dWTtPHDsUQfZlW)

![](/files/-MOraG5rqkVPcqXg-ZCI)

> #### 兩個容器之間擴展Web服務器服務

```
docker service scale myweb=5
```

![](/files/-MOrb7ejtLG9-9PV5W1Y)

![](/files/-MOrbCTF0lIkeH_cGK2N)

```
docker service scale myweb=3
```

![](/files/-MOrbQTRIlyA1-wp8LIL)

```
docker node update --availability active vm1
```

```
docker service scale myweb=5
```

![](/files/-MOrcdtSRiaAhJYBbgli)

![](/files/-MOrdVmiHxnS39pcTYRY)

```
docker service scale myweb=1
```

```
docker service ps myweb
```

![](/files/-MOrdzZKtmhGkhveEB_W)

```
docker network ls
```

```
docker network inspect [ingress_NetworkID]
```

![](/files/-MOrj2rgfxA9rTdSR3p6)

```
docker ps
```

```
docker inspect [httpd_容器ID]
```

![](/files/-MOrrHEaVqqyTCtA90SM)

```
docker service ls
```

```
docker service ps myweb
```

> #### 移除 service

```
docker service rm myweb
```

```
docker service ls
```

![](/files/-MOrtlIVkrjtzcH3cGVB)

![](/files/-MOrtqK8hog0-SYe6vEf)

```
docker service create --name myweb httpd
```

> #### 更新 service

```
docker service update --publish-add [8880:80] [myweb]
```

![](/files/-MOrv75qV6sCJEiW7lED)

```
docker service inspect [serviceID]
```

> #### 查看 service 的 log

```
docker service logs [serviceID]
```

![](/files/-MOrvxLIvz30mTFHpa-t)

```
docker service logs -f [serviceID]
```

![](/files/-MOrw6ibGAjhO4UvPqYV)
{% endtab %}

{% tab title="vm2" %}

```
docker swarm join --token SWMTKN-1-3yzvicajz4c2kyohfzr8zpzuu7jw17jtxz2wf7k2d12nwvq4av-0l3b8c5vwsy12x6m1gupxwuf6 192.168.8.129:2377
```

![](/files/-MOrTKwdZMGgBJBeWntn)

```
docker ps
```

```
docker inspect [httpd_容器ID]
```

{% endtab %}

{% tab title="vm3" %}

```
docker swarm join --token SWMTKN-1-3yzvicajz4c2kyohfzr8zpzuu7jw17jtxz2wf7k2d12nwvq4av-0l3b8c5vwsy12x6m1gupxwuf6 192.168.8.129:2377
```

![](/files/-MOrTFWdLoUvuBvGZNL3)
{% endtab %}
{% endtabs %}

###
