從“docker 1.12.0”版本開始內(nèi)置swarm;swarm是用于管理docker集群的平臺,采用go語言完成的開發(fā),從“1.12.0”版本開始,“Docker Swarm”已經(jīng)包含在Docker引擎中,并且已經(jīng)內(nèi)置了服務發(fā)現(xiàn)工具,因此不需要再配置Etcd或者Consul來進行服務發(fā)現(xiàn)配置。
本教程操作環(huán)境:linux7.3系統(tǒng)、docker19.03版、Dell G3電腦。
docker哪個版本內(nèi)置swarm
Swarm 是 Docker 公司推出的用來管理 docker 集群的平臺,幾乎全部用 GO 語言來完成的開發(fā)的
Docker Swarm 和 Docker Compose 一樣,都是 Docker 官方容器編排項目,但不同的是,Docker Compose 是一個在單個服務器或主機上創(chuàng)建多個容器的工具,而 Docker Swarm 則可以在多個服務器或主機上創(chuàng)建容器集群服務,對于微服務的部署,顯然 Docker Swarm 會更加適合。
從 Docker 1.12.0 版本開始,Docker Swarm 已經(jīng)包含在 Docker 引擎中(docker swarm),并且已經(jīng)內(nèi)置了服務發(fā)現(xiàn)工具,我們就不需要像之前一樣,再配置 Etcd 或者 Consul 來進行服務發(fā)現(xiàn)配置了。
上圖可以看出,Swarm 是典型的 master-slave 結(jié)構(gòu),通過發(fā)現(xiàn)服務來選舉 manager。manager 是中心管理節(jié)點,各個 node 上運行 agent 接受 manager 的統(tǒng)一管理,集群會自動通過 Raft 協(xié)議分布式選舉出 manager 節(jié)點,無需額外的發(fā)現(xiàn)服務支持,避免了單點的瓶頸問題,同時也內(nèi)置了 DNS 的負載均衡和對外部負載均衡機制的集成支持。
擴展知識
Docker Swarm 工作原理
1)Docker Engine client
docker service create:我們通過 docker service create 這個命令去創(chuàng)建一個服務。
2)swarm manager
API:這個請求直接由Swarm manager的API進行接收,接收命令并創(chuàng)建服務對象。
orchestrator:為服務創(chuàng)建一個任務。
allocater:為這個任務分配IP地址。
dispatcher:將任務分配到指定的節(jié)點。
scheduler:再該節(jié)點中下發(fā)指定命令。
3)worker node:接收manager任務后去運行這個任務
container:創(chuàng)建相應的容器。
worker:連接到調(diào)度程序以檢查分配的任務
executor:執(zhí)行分配給工作節(jié)點的任務
Service:為一個副本,可以理解為是一個任務,一個任務是一個容器。
swarm manager:它將這個副本下發(fā)到三個可用的work節(jié)點。
container:實際的docker容器去運行應用。
task:work任務的名稱為service名稱后面跟.1根據(jù)個數(shù)以此類推。
推薦學習:《docker視頻教程》