本主題介紹Docker Engine 1.12集羣管理和編配特性特有的一些概念。node
Docker引擎中嵌入的集羣管理和編配功能是使用swarmkit構建的。Swarmkit是一個獨立的項目,它實現了Docker的編配層,並直接在Docker中使用。
集羣由多臺以集羣模式運行的Docker主機組成,它們分別充當管理員managers(管理成員和委託)和工做者workers(運行羣服務services)。給定的Docker主機能夠是經理manager、工人worker,也能夠同時扮演這兩個角色。建立服務service時,須要定義其最佳狀態(副本數量、可用的網絡和存儲資源、服務對外公開的端口,等等)。Docker的工做是維護所需的狀態。例如,若是一個工做節點變得不可用,Docker將在其餘節點上調度該節點的任務。任務task是一個運行的容器container,它是集羣服務service的一部分,由集羣管理器manager管理,而不是一個獨立的容器。docker
集羣服務相對於獨立容器的一個關鍵優點是,你能夠修改服務的配置,包括它所鏈接的網絡和卷,而不須要手動從新啓動服務。Docker將更新配置,使用過時配置中止服務任務,並建立與所需配置匹配的新任務。
當Docker以集羣模式運行時,你仍然能夠在參與集羣的任何Docker主機以及集羣服務上運行獨立容器。獨立容器和集羣服務之間的一個關鍵區別是,只有羣管理器才能管理羣,而獨立容器能夠在任何守護進程上啓動。Docker守護進程能夠做爲管理人員、工人或二者兼而有之地參與到集羣中。服務器
就像你可使用 Docker Compose來定義和運行容器同樣,你也能夠定義和運行集羣服務棧(swarm service stacks)。
請繼續閱讀有關Docker集羣服務的概念的詳細信息,包括節點 nodes、服務services、任務tasks和負載平衡load balancing。網絡
節點是參與集羣的Docker引擎的實例。你也能夠將其視爲Docker節點。你能夠在一臺物理計算機或雲服務器上運行一個或多個節點,可是生產集羣部署一般包括分佈在多個物理和雲機器上的Docker節點。
要將應用程序部署到集羣中,須要向manager節點提交服務定義。管理器manager節點將稱爲任務task的工做單元分派給工做節點node。
Manager節點還執行維護集羣所需狀態所需的編配和集羣管理功能。Manager節點選擇一個leader來執行編排任務。負載均衡
工做節點接收並執行從管理節點分派的任務。默認狀況下,管理器節點也做爲工做節點運行服務,可是你能夠將它們配置爲只運行管理器任務且僅做爲管理器節點。代理在每一個工做節點上運行,並報告分配給它的任務。工做節點將其分配的任務的當前狀態通知管理節點,以便管理器可以維護每一個工做人員所需的狀態。spa
服務service是要在管理器或工做節點上執行的任務的定義。它是集羣體系的中心結構,是用戶與集羣交互的主要根源。
在建立服務時,要指定要使用哪一個容器鏡像,以及在運行的容器中執行哪些命令。
在副本服務模型中,集羣管理器manager根據你在所需狀態下設置的規模在節點之間分發特定數量的副本任務。代理
對於全局服務,swarm在集羣中的每一個可用節點上爲服務運行一個任務task。
任務task攜帶Docker容器和在容器中運行的命令。它是集羣的原子調度單元。管理節點根據服務級別中設置的副本數量將任務task分配給工做節點。一旦將任務分配給一個節點,它就不能移動到另外一個節點。它只能在指定的節點上運行或失敗。進程
swarm管理器使用入口負載平衡公開你但願向集羣外部提供的服務。集羣管理器manager能夠自動爲服務service分配一個發佈端口,也能夠爲服務配置一個發佈端口。你能夠指定任何未使用的端口。若是你沒有指定端口,羣管理器將爲服務分配一個端口,範圍爲30000-32767。
外部組件(如雲負載平衡器)能夠訪問集羣中任何節點的PublishedPort上的服務,不管該節點當前是否運行該服務的任務。集羣中的全部節點都將鏈接路由到正在運行的任務實例。
swarm模式有一個內部DNS組件,它自動爲集羣中的每一個服務分配一個DNS條目。集羣管理器使用內部負載平衡,根據服務的DNS名稱在集羣中的服務之間分發請求。ci