iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 25
1

今天要來介紹 Docker Swarm。Docker Swarm 是什麼?它是一個能夠在多台的不同實體機器上執行 Docker Container,然後型成一個叢集(Cluster)的一個工具,如下圖:

https://ithelp.ithome.com.tw/upload/images/20171228/201034567RGlF5wlmZ.png

Manager 的功能是分配 Docker Container 需要執行在哪台的 Node 上,主要的分配策略有以下三種的方式:
**spread:**選擇執行數量較少 Container 的 Node
**binpack:**盡量把 Container 放在同一台的 Node 上執行,這樣就可以減少 Node 的使用量
**random:**隨機的分配 Container 要在哪個 Node 上執行

上圖的 Node1、Node2、Node3 就是主要在執行 Container 的實體機器。在 Docker 1.12 之後 Swarm 就被整合在 Docker 裡面,docker 的 command 裡就有內建的 swarm。但是今天的實作是使用 Swarm 的 Docker Image 來啟動 Container 的方式把Docker Swarm 的 service 啟動起來。

在網路上常常看到 Kubernetes(K8S) 和 Swarm 被拿來比較,如下:
K8S:

  • 可以支援多種 Container 工具,像是 Docker、Rocket
  • Kubernetes 有提供自已的 Restful API
  • 如果需要使用 Docker-Compose 需要先轉換

Swarm:

  • 只支援 Docker 的 Container
  • 直接使用 Docker Restful API
  • 直接就可以使用 Docker-Compose

今天拿 2 台 Host來實作 Docker Swarm。 host1是 Manager 另外一台 host2 是當作一般的Node。在實作之前要先記得把防火牆閉或是開通特定的 Port

1. 在使用 Docker Swarm 之前需要修改 Docker 的設定檔,並且重新啟動 Docker 的 Service
修改host1 的 /etc/docker/daemon.json

{
  "hosts": [
     "unix:///var/run/docker.sock",
     "tcp://10.1.3.228:2375"
  ]
}

修改 host2 的 /etc/docker/daemon.json

{
  "hosts": [
     "unix:///var/run/docker.sock",
     "tcp://10.1.3.229:2375"
  ]
}

重新啟動 Docker 的 Service 指令如下

# systemctl restart docker

2. 在 host1 啟動 consul service,用來存取連線的資訊,指令如下

$ docker run -d -p 8500:8500 --name=consul progrium/consul -server -bootstrap

3. 在 host1 啟動 swarm 的 manager 指令如下

$ docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise 10.1.3.228:4000 consul://10.1.3.228:8500

以上的 4000 Port 就是 Swarm Manage 的 Port,使用者只要透過此 Port 就可以操作整個 Docker Cluster 的 Container

4. 在 host2 啟動 swarm 的 Node 指令如下

$ docker run -d swarm join --advertise=10.1.3.229:2375 consul://10.1.3.228:8500

5. Node 啟動之後,就可以使用以下的指令來看整個 Swarm 的狀態

$ docker -H 10.1.3.228:4000 info

畫面如下
https://ithelp.ithome.com.tw/upload/images/20171228/20103456Ooqbd0Lyzz.png

6. 在 Docker Cluster 上啟動一個 Docker Container 指令如下

$ docker -H 10.1.3.228:4000 run -d -p 8080:8080 jackyohhub/build-tomcat-test

7. 使用以下指令查看 Docker Container 的狀態

$ docker -H 10.1.3.228:4000 ps -a

畫面如下
https://ithelp.ithome.com.tw/upload/images/20171228/201034560bqOt3eClr.png

今天介紹的 Docker Swarm 讓我們的 Docker 可以形成一整個大的 Cluster 叢集,使得在執行 Container 上可以分散在不同的實體機器上面執行。


上一篇
Day 24:使用 Docker-Compose 啟動多個 Docker Container
下一篇
Day 26:使用 Intellij 來操作 Docker 和撰寫 Dockerfile
系列文
用30天來介紹和使用 Docker30

尚未有邦友留言

立即登入留言