swarm介紹
Swarm這個項目名稱特別貼切。在Wiki的解釋中,Swarm behavior是指動物的群集行 為。比如我們常見的蜂群,魚群,秋天往南飛的雁群都可以稱作Swarm behavior。 Swarm項目正是這樣,通過把多個Docker Engine聚集在一起,形成一個大的dockerengine,對外提供容器的集群服務。同時這個集群對外提供Swarm API(命令,docker engine的命令),用戶可以像使用Docker Engine一樣使用Docker集群。
Swarm是Docker公司在2014年12月初發布的容器管理工具,和Swarm一起發布的 Docker管理工具還有Machine以及Compose。Swarm是一套較為簡單的工具,用以管理 Docker集群,使得Docker集群暴露給用戶時相當於一個虛擬的整體。Swarm將一群 Docker宿主機變成一個單一的,虛擬的主機。Swarm使用標准的Docker API接口作為其 前端訪問入口,換言之,各種形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接與Swarm通信。Swarm幾乎全部用Go語言來完成開發,Swarm0.2 版本增加了一個新的策略來調度集群中的容器,使得在可用的節點上傳播它們,以及支
持更多的Docker命令以及集群驅動。Swarm deamon只是一個調度器(Scheduler)加 路由器(router),Swarm自己不運行容器,它只是接受docker客戶端發送過來的請求, 調度適合的節點來運行容器,這意味着,即使Swarm由於某些原因掛掉了,集群中的節 點也會照常運行,當Swarm重新恢復運行之后,它會收集重建集群信息。
docker swarm特點:
- 1) 對外以Docker API接口呈現,這樣帶來的好處是,如果現有系統使用Docker Engine, 則可以平滑將Docker Engine切到Swarm上,無需改動現有系統。
- 2) Swarm對用戶來說,之前使用Docker的經驗可以繼承過來。非常容易上手,學習成本 和二次開發成本都比較低。同時Swarm本身專注於Docker集群管理,非常輕量,占用資 源也非常少。簡單說,就是插件化機制,Swarm中的各個模塊都抽象出了API,可以根據 自己一些特點進行定制實現。
- 3) Swarm自身對Docker命令參數支持的比較完善,Swarm目前與Docker是同步發布 的。Docker的新功能,都會第一時間在Swarm中體現。
docker swarm架構
Swarm作為一個管理Docker集群的工具,首先需要將其部署起來,可以單獨將Swarm部 署於一個節點。另外,自然需要一個Docker集群,集群上每一個節點均安裝有Docker。


相關術語:
- Swarm Manager:集群的管理工具,通過swarm manager管理多個節點。
- Node:是已加入到swarm的Docker引擎的實例 。
- manager nodes:也就是管理節點 ,執行集群的管理功能,維護集群的狀態, 選舉一個leader節點去執 行調度任務
- worker nodes,也就是工作節點 ,接收和執行任務。參與容器集群負載調度, 僅用於承載task

一個服務是工作節點上執行任務的定義。創建一個服務,指定了容器所使用的鏡像和 容器運行的命令。service是運行在worker nodes上的task的描述,service的描述包 括使用哪個docker 鏡像,以及在使用該鏡像的容器中執行什么命令。
task任務:一個任務包含了一個容器及其運行的命令。task是service的執行實體, task啟動docker容器並在容器中執行任務

docker swarm使用
搭建步驟:
1、環境准備:
1.1、准備三台已近安裝docker engine的centos/Ubuntu系統主機(docker版本必須在 1.12以上的版本,老版本不支持swarm)
1.2、docker容器主機的ip地址固定,集群中所有工作節點必須能訪問該管理節點
1.3、集群管理節點必須使用相應的協議並且保證端口可用 集群管理通信:
- TCP,端口2377
- 節點通信:TCP和UDP,端口7946
- 覆蓋型網絡(docker網絡):UDP,端口4789 overlay驅動
說明:三台容器主機的ip地址分別為: 192.168.200.162(管理節點) 192.168.200.163(工作節點) 192.168.200.158(工作節點)
主機名稱分別為:manager1、work1以及work2
vim /etc/hostname (修改完成后需要重啟)
2、創建docker swarm
2.1、在manager1機器上創建docker swarm集群
docker swarm init ‐‐advertise‐addr 192.168.200.162 (‐‐advertise‐addr將該IP地址的機器設置為集群管理節點;如果是單節點,無需該參 數
2.2、查看管理節點集群信息:
docker node ls
3、向docker swarm中添加工作節點:在兩個工作節點中分別執行如下命令,ip地址是 manager節點的
3.1、添加兩個work節點
docker swarm join ‐‐token xxx 192.168.200.138:2377 (worker1)
docker swarm join ‐‐token xxx 192.168.200.138:2377 (worker2)
(‐‐token xxx:向指定集群中加入工作節點的認證信息,xxx認證信息是在創建docker swarm時產生的)
3.2、繼續查看管理節點集群信息與之前的區別
docker node ls
4、在docker swarm中部署服務
在Docker Swarm集群中部署服務時,既可以使用Docker Hub上自帶的鏡像來啟動服務,也
5 docker compose編排工具 5.1 docker compose介紹
可以使用自己通Dockerfile構建的鏡像來啟動服務。如果使用自己通過Dockerfile構建的 鏡像來啟動服務那么必須先將鏡像推送到Docker Hub中心倉庫。為了方便讀者的學習,這里 以使用Docker Hub上自帶的alpine鏡像為例來部署集群服務
4.1、部署服務
docker service create ‐‐replicas 1 ‐‐name helloworld alpine ping docker.com
- docker service create指令:用於在Swarm集群中創建一個基於alpine鏡像的服務
- ‐‐replicas參數:指定了該服務只有一個副本實例
- ‐‐name參數:指定創建成功后的服務名稱為helloworld
- ping docker.com指令:表示服務啟動后執行的命令
5.查看docker swarm集群中的服務
查看服務列表:docker service ls
查看部署具體服務的詳細信息:docker service inspect
服務名稱 查看服務在集群節點上的分配以及運行情況:docker service ps 服務名稱
6、修改副本數量
在manager1上,更改服務副本的數量(創建的副本會隨機分配到不同的節點)
docker service scale helloworld=5
7、刪除服務(在管理節點)
docker service rm 服務名稱
8、訪問服務
8.1、查看集群環境下的網絡列表:
docker network ls
8.2、在manager1上創建一overlay為驅動的網絡(默認使用的網絡連接ingress)
docker network create ‐d=overlay my‐multi‐host‐network
8.3、在集群管理節點manager1上部署一個nginx服務
docker service create \
‐‐network my‐multi‐host‐network \
‐‐name my‐web \
‐p 8080:80 \
‐‐replicas 2 \
nginx
8.3、在管理節點查看服務的運行情況:
docker service ps my‐web
