# 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" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNRsetQef5xd4Y4EQao%2F-MNRvpSNXpd-sNvGxvjd%2Fimage.png?alt=media\&token=a880dd4e-ec14-47ec-a7d6-00ff1ef4bf72)
{% endtab %}

{% tab title="vm2" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNRsetQef5xd4Y4EQao%2F-MNRvTeVRxMfQogqm4nK%2Fimage.png?alt=media\&token=5b78e6b2-0cbb-4bad-8d3f-8f13bec560d6)
{% endtab %}

{% tab title="vm3" %}
![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MNRsetQef5xd4Y4EQao%2F-MNRv6rNjMD2rwLKYs6i%2Fimage.png?alt=media\&token=09d1a951-fc78-4bcb-8738-e7da27282c2b)
{% endtab %}
{% endtabs %}

### Docker Swarm

![docker swarm 中，主要的就是 managers and workers](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrfjt4rmeXgmmT-m6e%2Fimage.png?alt=media\&token=01a540f9-aa30-42a9-b36d-0ba8ea18f341)

![docker swarm 內建的 Loan Balance + Routing Mesh會將 request route 到正在運行的 container 上](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrfD4XiN8GKRL0SMu9%2Fimage.png?alt=media\&token=1a4f00f3-bcb2-4019-ae39-d2c0571ef5bd)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrzaWIrLCm44pm2fr9%2FCloud%20Communication%20-%20Docker%20Swarm.jpg?alt=media\&token=79059f40-84e0-4a16-840d-e1547eb4b5bf)

## 課堂練習

### 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 %}

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOoY-3PYUgb4QBEJPv0%2F-MOrTpTtetBqs-0yRDEM%2Fimage.png?alt=media\&token=2167609b-bee8-4546-b410-0225a326a38b)

```
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
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrVQQp07rgVMEfvi0-%2Fimage.png?alt=media\&token=71dcbc3e-44e4-4f8b-baa9-37656f907c2c)

> #### 離開 swarm

```
docker swarm leave -f
```

> #### Update a node

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

```
docker pull dockersamples/visualizer
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrXzpXdTARqE8TJEuF%2Fimage.png?alt=media\&token=6b807672-a674-46fd-9083-dbf9e1d31685)

```
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
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrZj9ytDLqQrk3nokj%2Fimage.png?alt=media\&token=d1915129-54f4-4987-9501-3a4f4e343dd5)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOr_27C5y3XCDUu2O9h%2Fimage.png?alt=media\&token=650d463b-0740-4419-9276-52116011ba17)

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

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

```
docker service ls
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOr_zxiJv4eNkGjrPBO%2Fimage.png?alt=media\&token=124bd732-583e-4dca-b495-9ab1d1be79cf)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOra3dWTtPHDsUQfZlW%2Fimage.png?alt=media\&token=44c79172-a5f7-43af-beb2-ee206fc47dbb)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOraG5rqkVPcqXg-ZCI%2Fimage.png?alt=media\&token=b76a4333-ccf6-4640-a56f-987091bc1495)

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

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrb7ejtLG9-9PV5W1Y%2Fimage.png?alt=media\&token=a241ae85-dcab-4878-9765-dfb60e188abe)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrbCTF0lIkeH_cGK2N%2Fimage.png?alt=media\&token=2b18c7b6-fa02-483c-90a7-9897eabda629)

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrbQTRIlyA1-wp8LIL%2Fimage.png?alt=media\&token=0633ddfa-4aad-4eb9-a2ed-d352c7adbb88)

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

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrcdtSRiaAhJYBbgli%2Fimage.png?alt=media\&token=0cc4da05-fb1b-462c-bebd-e2a41bd3685a)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrdVmiHxnS39pcTYRY%2Fimage.png?alt=media\&token=cba940b1-65a5-4fba-9a98-1d4ec1b908c1)

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

```
docker service ps myweb
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrdzZKtmhGkhveEB_W%2Fimage.png?alt=media\&token=f9253ae8-14ae-49b4-a61d-a5b8aada0953)

```
docker network ls
```

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrj2rgfxA9rTdSR3p6%2Fimage.png?alt=media\&token=0d23f300-ad9a-4587-b11e-4c81355fa4a5)

```
docker ps
```

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrrHEaVqqyTCtA90SM%2Fimage.png?alt=media\&token=351a4aed-d36a-4d14-a1fb-9439a22c5907)

```
docker service ls
```

```
docker service ps myweb
```

> #### 移除 service

```
docker service rm myweb
```

```
docker service ls
```

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrtlIVkrjtzcH3cGVB%2Fimage.png?alt=media\&token=163b638c-55fa-4a4f-bb04-12a85ce6a053)

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrtqK8hog0-SYe6vEf%2Fimage.png?alt=media\&token=2e9def80-8750-4c08-a62d-607d4c45311d)

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

> #### 更新 service

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrv75qV6sCJEiW7lED%2Fimage.png?alt=media\&token=a75c105b-7c00-4e54-aec9-20510dfd4b3a)

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

> #### 查看 service 的 log

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrvxLIvz30mTFHpa-t%2Fimage.png?alt=media\&token=f54acb59-cfd0-4da3-8411-dbe893282eff)

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOrUtkLxWzlF5MX0NwQ%2F-MOrw6ibGAjhO4UvPqYV%2Fimage.png?alt=media\&token=9b953dc7-8c2a-4edb-a383-7c30eb25e26f)
{% endtab %}

{% tab title="vm2" %}

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOoY-3PYUgb4QBEJPv0%2F-MOrTKwdZMGgBJBeWntn%2Fimage.png?alt=media\&token=bbc7c7f0-a026-4d3d-9cb5-e897f7c00247)

```
docker ps
```

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

{% endtab %}

{% tab title="vm3" %}

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

![](https://483685739-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHFSfnhkNCUTnJ2hcGc%2F-MOoY-3PYUgb4QBEJPv0%2F-MOrTFWdLoUvuBvGZNL3%2Fimage.png?alt=media\&token=09f5a004-c741-471d-9087-97157cbfdcab)
{% endtab %}
{% endtabs %}

###
