在個人《Docker Swarm集羣初探》一文中,咱們實際體驗了Docker Swarm容器集羣技術的魅力,與《Kubernetes實踐錄》一文中提到的Kubernetes集羣技術相比,Docker Swarm沒有Kubernetes顯得那麼厚重,所以能夠認爲是更加輕量級的容器集羣技術,這也就意味着上手更加方便快捷,使用起來也要省事不少。做爲Docker集羣技術三(或「四」)架馬車之一的Docker Swarm,它從一開始即是Docker官方的「親兒子」,發展到如今也經歷了不少階段和迭代。做者在學習的過程當中也瞭解了一點其發展歷史,發現有幾個概念仍是挺容易混淆的,所以撰寫成文,是梳理,也是總結。node
注: 本文首發於 My 公衆號 CodeSheep ,可 長按 或 掃描 下面的 當心心 來訂閱 ↓ ↓ ↓
早在2014年末,Docker公司就設計了容器集羣的方案組合:Machine + Swarm + Compose。其中Machine主要用於快速建立Docker運行環境,其支持在建立出來的節點上自動部署Swarm,此時的Swarm咱們稱爲 「經典Swarm」,它是一款整合跨節點網絡的集羣式容器服務,其利用Docker守護進程的API,將多節點的計算資源進行彙總,並提供兼容Docker的運行API,使用者只須要在執行Docker命令工具時,用--host參數將目標設置爲Swarm服務的IP和端口,便可操做整個容器集羣。docker
固然此時的Swarm侷限性較大,好比:編程
因而就有了下面的SwarmKit的誕生。c#
在2016年2月,Docker公司開始了一個名叫 SwarmKit 的項目。而恰在Docker 1.12 RC以前的一段時間,Docker 發佈了 Swarmkit,這是一個獨立的、開源的容器編排項目。SwarmKit不一樣於一開始的經典Swarm,它從一開始就從新設計了一套獨立的API和模型體系,而且採用獨立的客戶端命令行工具:swarmctl
服務器
和上面的經典Swarm模型相比,它加入了以下特性:網絡
swarmd
命令負責管理,swarmctl
命令用於控制)然而此時的SwarmKit並無提供諸如服務發現、負載均衡和路由等功能。儘管如此,SwarmKit其實已是咱們今天普遍使用的Docker Swarm集羣技術的基石。負載均衡
Swarm Mode則更進一步,它在Docker 1.12版本開始爲你們所周知,一個 docker swarm
命令 紅遍大江南北,這個所謂的Swarm Mode其實就是咱們今天所普遍使用的Docker Swarm集羣技術。框架
然而Swarm Mode並非一個全新的東西,也並非一個全新的模式,而是站在SwarmKit的巨人肩膀上發展起來的,是Docker中的一組與集羣相關功能的統稱而已。Docker將SwarmKit的核心模塊內嵌於Docker的後臺服務之中,經過不一樣的命令容許使用者同時以「本節點」和「本集羣」這兩種視角來操做整個集羣,增長了集羣的管理、節點的管理、服務的管理和編排等等一系列高級特性,就像在個人《Docker Swarm集羣初探》一文中體驗的那樣。微服務
所以總結一下Swarm Mode就是:工具
docker swarm
命令)若是用一張圖來表示 Docker、經典Swarm、SwarmKit、Swarm Mode 四個概念之間的關係,則大體能夠以下圖所示:
正如圖中所示,SwarmKit 和 Swarm Mode 重疊的部分表示的是相應的項目之間存在代碼層面的互相引用或組件形式的依賴,其實 Swarm Mode 所建立的集羣本質上並沒有異於 SwarmKit 集羣。
更細緻一點,咱們從SwarmKit和Swarm Mode兩者在一些經常使用命令操做上的比較來看看兩者的區別和聯繫:
1. 建立集羣
swarmd
docker swarm init
2. 往集羣中添加節點
swarmd --hostname worknode --join-addr [IP:端口] --join-token [Token]
docker swarm join --token [token] [IP:端口]
3. 查看集羣節點信息
swarmctl node ls
docker node ls
4. 建立服務
swarmctl service create --name [服務名] --image [鏡像名]
docker service create --name [服務名] [鏡像名]
5. 服務擴容
swarmctl service update [服務名] --replicas [副本數目]
docker service scale [服務名]=[副本數目]
6. 服務(鏡像)升級
swarmctl service update [服務名] --image [鏡像名]
docker service update [服務名] --image [鏡像名]
從命令行操做來看,Swarm Mode其實很是相似於SwarmKit,然而前者更加靠近 Docker 原生態圈的命令,所以更加人性化。
做者更多的SpringBt實踐文章在此:
若是有興趣,也能夠抽點時間看看做者一些關於容器化、微服務化方面的文章: