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

###


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://anida-huang.gitbook.io/cloud-communication/qi-mo/docker-swarm.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
