2017-03-02 60 views
7

我試圖瞭解D-ComposeD-Swarm之間的差異或相似之處。何時使用Docker-Compose以及何時使用Docker-Swarm

通過讀我已經理解的是,搬運工-撰寫提供到不同的容器粘結在一起和在協作工作,作爲一個單一的服務的機制的文件(我猜測它使用相同的功能--link命令用於連接兩個容器)

而且,我的搬運工-羣的理解是,它允許您管理不同泊塢窗的主機,每個正在運行的一些泊塢窗圖像的幾個容器實例的集羣。我們可以將連接定義爲覆蓋網絡在羣中的不同容器之間(即使它們跨羣中的兩個碼頭主機)以將它們作爲一個單元連接起來。

我想知道的是碼頭羣成功碼頭組成和覆蓋網絡是新的(推薦)方式來連接容器?

或者是碼頭構成仍然是整個碼頭系列的一個組成部分,並且預計並建議使用它來連接容器以便協作工作。如果docker-compose在集羣中的不同節點上使用容器工作,那麼它是如何工作的?

或者是覆蓋網絡是用於連接羣集中的不同主機上的容器,而docker-compose用於創建內部鏈接?

除此之外,我還看到,它在碼頭文檔中提到,- 鏈接不再推薦,並且很快就會過時。

我有點困惑嗎?

非常感謝!

+0

請問沒有一個答案解決您的問題?如果他們這樣做,然後選中複選框以接受其中一個作爲答案。 – JoeG

回答

2

我認爲你對大部分理解都是正確的,但是需要進行一些調整。

你是正確的碼頭構成是提出多容器應用程序。之前您曾用做docker run ..來啓動每個容器。通常,包含微服務範例的現代應用程序可以由數十種服務組成,並且使用docker run ..將很快變得非常煩人。因此,docker-compose允許您將所有容器及其屬性以及它們如何相互連接爲yamljson文件,以便您可以更容易地管理它。

因此,docker-compose是docker生態系統中的容器編排部分。

鏈接不同,它們只是docker-compose或docker run命令的一部分,已棄用software defined networks,其中overlay networks只是其中之一。 Swarm是docker中的調度組件。什麼是調度 - 只是找出將你的容器「放置」在碼頭主機集羣中的什麼地方。您可以擁有數百個服務器的集羣,並且您可能擁有數百個容器,每個容器爲十幾個不同的應用程序封裝服務。現在應該如何將這些容器分佈在數百臺服務器的集羣中,是否應該將某些容器放置在某些主機上,因爲它們滿足特定的標準,或者它們應該更接近(或不是)與某種方式相關的其他容器......所有這些都是由Docker Swarm執行的調度組件的一部分。

我建議你讀完了入門文檔去docker.com這裏:https://docs.docker.com/engine/getstarted-voting-app/

+0

非常感謝。我已經完成了這個教程。我試圖弄清楚docker開發者本身是否有一個特別的建議,告訴我們需要使用什麼來連接密切相關的容器 - **組成**或者**羣集覆蓋網絡**。我遇到的困境是,通過_network_連接容器的想法與通過類似撰寫(或者它們是相同的?)連接它們似乎並不相同。它是否像容器綁定一樣比覆蓋網絡風格的連接更安全? – Shabirmean

2

撰寫或羣或羣覆蓋網絡

你會發現你需要使用所有的以上如果你在做什麼以外的任何東西,而不是你的筆記本電腦上的演示等。

我特意分開了swarm & swarm overlay網絡,因爲你不需要同時使用兩者,但你不能在沒有羣體的情況下獲得覆蓋網絡。

撰寫是爲了將多個容器放在一起。現在它們是相互關聯的,儘管它們可能不是。但讓我們假設一個典型的例子,當容器用於彼此相關的服務時,那麼您希望他們以某種方式彼此交談,但是卻要控制他們如何使用網絡彼此交談。例如,採用具有webserver,appserver和db的3層應用程序。假設所有這三個組件都是docker化的,並且您正在使用compose將它們放在一起,而不是使用不同的參數運行三次docker run..等等。所有這三個組件都會出現,但是您希望控制它們如何相互連接。您希望Web服務器能夠與應用服務器通信,但不能直接與數據庫通信。並且您希望應用程序服務器交談(ping)數據庫服務器容器並ping網絡服務器。所有連接都是雙向的,但僅限於您希望能夠相互通信的服務。對於這樣的安排,你通常會設置2個網絡 - 比如說frontendbackend。 Web和應用程序容器連接到前端網絡。應用程序和db容器連接到後端網絡。因爲db和web容器之間沒有共同的網絡,所以它們不能相互觸摸(ping),這是你的意圖。

現在,如果您希望這3個服務能夠在100臺機器的羣集上運行,並且您還希望在它們之間擴展,則需要一個跨越多個主機的網絡。這就是疊加網絡(羣體)的情況。覆蓋網絡不過是通過VxLAN技術構建的多主機網絡。除了它是幾乎所有現代網絡基礎設施都支持的標準網絡拓撲之外,您不必瞭解VxLAN。

我希望澄清一下。

編輯:我沒有看到你已經得到了答案!

+0

謝謝@Anoop。所以我想這是對的,如果我說撰寫和swarm都使用基於**。yaml **的服務描述來啓動服務,並且都使用創建的用戶定義網絡來連接這些服務。唯一不同的是compose是一組容器在單個docker-host上運行,swarm是爲多主機平臺運行的。 – Shabirmean

+0

是的,但你可以混合搭配,意思是說 - 你可以使用同一個組合文件來定位一個swarm羣集而不是一個docker主機。這種方式非常靈活。 – Anoop

14

它可能會幫助開始與幾個定義:

  • 泊塢窗,構成:命令來配置和管理一組相關的容器。它是docker cli使用的相同API的前端,因此您可以使用像docker run這樣的命令來重現它的行爲。
  • docker-compose.yml:一組容器的定義文件,由docker-compose使用,現在也用swarm模式。
  • swarm模式:用於將一組碼頭引擎作爲單個實體進行管理並提供編排(不斷嘗試糾正當前狀態和目標狀態之間的差異)。
  • 服務:一個或多個容器用於羣集中的相同圖像和配置,多個容器提供可伸縮性。
  • 堆棧:羣中的一個或多個服務,可以使用DAB或docker-compose.yml文件定義這些服務。
  • 橋樑網絡:由單個碼頭引擎管理的網絡,其中多個容器可以相互通信。您可能有多個由引擎管理的網絡,並且容器可以連接到零個或多個網絡。
  • 覆蓋網絡:類似於橋網絡,但跨越多個碼頭引擎。這些需要一個鍵/值存儲來保持其狀態。 Swarm模式提供了這種功能,但是如果羣集模式被禁用,您也可以使用etcd,consul或zookeeper。
  • 鏈接:一種將容器連接在橋接網絡之前的方法。其用法不再推薦。
  • 經典swarm:作爲容器運行的集成swarm模式的前身,允許多個引擎顯示爲一個,但不提供編排或包含自己的k/v存儲。

要回答的問題:

有搬運工人,羣成功泊塢窗,撰寫和覆蓋網絡是新的(推薦)的方式來連接容器?

或者是碼頭構成仍然是整個碼頭系列的一個組成部分,並且預計並建議使用它來連接容器以便協作工作。如果docker-compose在集羣中的不同節點上使用容器工作,那麼它是如何工作的?

它們提供了不同的功能,並將繼續用於一個目的。 docker-compose無法在swarm模式下啓動容器,但可以使用更新版本的docker-compose.yml文件(版本3)直接以羣集模式定義堆棧,而無需使用docker-compose本身。 docker-compose需要在羣集模式之外,單個碼頭引擎或經典羣集上管理容器。

或者它是覆蓋網絡是用於連接羣集中的不同主機上的容器,而docker-compose用於創建內部鏈接?

此外我還看到它在docker文檔中提到 - 鏈接不再被推薦,並且很快就會過時。

docker-compose從版本2的yml文件開始,默認情況下將多個容器連接到每個項目的新橋接網絡(項目默認爲目錄名稱)。使用經典swarm時,默認爲使用外部k/v存儲的覆蓋網絡。並且使用羣模式堆棧,這將是覆蓋網絡。

使用docker網絡是使容器相互通信的首選方式。您希望您希望與Docker環境的其餘部分隔離的每組容器都有一個網絡。 docker-compose可以自動創建這個網絡,但是你也可以通過命令行docker networks create來完成。

鏈接已經在很大程度上被內置DNS發現的碼頭網絡取代。當您從docker-compose.yml中刪除鏈接時,您可能需要用depends_on部分替換它們以強制執行容器啓動順序。否則,有很少的情況下,鏈接是有道理的,我看到的所有用法都來自過時的文檔。

相關問題