在大會上,Victor Vieux與Andrea Luzzardi介紹了有關Swarm的基本概念,并且示範了Swarm的基本工作流程,他們還提出了一個非常有趣的結論:雖然POC (概念驗證proof of concept)在功能上對項目進行論證并且能夠進行基本的展示,但是這是以忽略整個的項目代碼并且從頭開始建構項目為代價的。我很贊同這個想法,在以後對一個項目進行POC時也要牢記這一點。
對Swarm進行操作的過程與處理單個Docker主機非常相似,無需進行太多修改,它就可以和現有的工具鍊進行很好的互動。Swarm是運作在Linux機器上的守護程式,它所綁定的網絡接口與獨立Docker執行個體相同(http/2375或https/2376)。Swarm 守護程序可以與标準的Docker用戶端<code>>=1.4.0</code>相連接配接并接受其發送來的資訊,之後,Swarm服務會對來自Docker用戶端的指令資訊進行配置,最後通過代理的方式把資訊發送給不同Docker的守護程序,Swarm服務同時也監聽着标準的Docker端口。 比如,Swarm會基于不同的打包算法并結合Docker守護程序在啟動時指定好标簽(tags),把<code>create</code>指令配置設定到不同的Docker守護程序上來執行。根據這一特性,使用者可以建立由不同的Docker主機所構成的分區叢集(partitioned cluster)并且将整個叢集在邏輯上以一個單一的Docker終端的形式公開給使用者,Swarm使這個過程變得極其簡單。
與Swarm的互動“或多或少”地類似于與一個非叢集的Docker執行個體的互動,但是也有一些需要注意的地方。Swarm并非對所有的Docker指令提供一對一的支援。這不僅是由于兩種服務在體系結構上的差別,還因為Swarm服務剛剛起步不久,有些指令尚未得到實作(我想有些可能永遠不會被實作)。目前幾乎一切需要運作容器的指令都是可用的,包括以下的常用指令(還有其他的):
<code>docker run</code>
<code>docker create</code>
<code>docker inspect</code>
<code>docker kill</code>
<code>docker logs</code>
<code>docker start</code>
以上介紹的内容是運作該工具時所需的重要組成部分。下面介紹一下在最常見的配置情況下,相關的技術具體如何運作:
Docker主機服務(伺服器上的Docker守護程序)通過<code>--label key=value</code>被啟動并對網絡進行監聽。
Swarm守護程序被啟動并指向一個檔案,這個檔案包含有構成叢集的主機以及這些主機所監聽的端口清單。
Swarm與每個Docker主機互動并确定他們的标記、健康狀況以及資源使用量,并維護後端和它們中繼資料的清單。
用戶端通過它的網絡端口(2375)與Swarm互動。與Swarm的互動方式與Docker互動的方式類似:建立、銷毀、運作、依附(attach)并獲得運作容器的日志以及其他相關内容。
當一個指令發出給Swarm,Swarm會:
基于提供的<code>constraint</code>标簽、終端的健康程度以及排程算法來決定把指令發送到哪裡。
針對合适的Docker守護程序執行指令。
傳回結果的格式與Docker守護程序相同。

Swarm守護程序本身相當于是一個排程器和一個路由器。它實際上并沒有運作容器,也就是說,如果Swarm服務停止了,它在終端Docker主機上已配置設定好的容器仍然是開啟的。另外,由于它不處理任何網絡路由(網絡連接配接需要被直接發送到後端的Docker主機上),即使Swarm守護程序意外終止,運作的容器仍然可用。當Swarm從這樣的崩潰中恢複,它依然能夠查詢終端以重建其中繼資料的清單。
這是有關Docker Swarm系列博文的第一篇。由于缺少相關的技術細節,我表示抱歉,但在随後的文章中會包含一些架構、代碼片段以及相關的實踐 :) 請留意第二篇:Docker Swarm的配置選項與需求,即将推出。
===========================
譯者介紹
原文釋出時間為:2015-01-30
本文作者:田浩浩
本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。
原文标題:Docker Swarm入門(一)概觀