2015-10-28 106 views
4

我有一個安裝部署與碼頭工人認爲工作原理如下:泊塢窗推送需要很長的時間

  1. 建立我的開發機器上的圖像通過Dockerfile
  2. 按下圖像註冊表(我試過既泊塢窗樞紐和Quay.io)
  3. 這一形象拉到部署服務器,並重新啓動容器。

我希望儘快完成這些步驟,但需要花費很長時間。即使對於尺寸適中的圖像(750MiB,包括標準ubuntu和朋友),稍作修改後,需要部署17分鐘。我優化了我的Dockerfile中的項目順序,因此大多數時候它實際上都會緩存圖像。這似乎沒有什麼區別。

主要的罪魁禍首是docker push一步。對於Docker Hub和Quay.io來說,推送圖像需要很長的時間。在我做的一個簡單的基準測試中,我執行了兩次,一次執行docker push,因此所有以前的圖像都已經在註冊表中。所以,我只看到這幾行:

... 
bf84c1d841244f: Image already pushed, skipping 
... 

但是,如果我的時間推,性能是可怕的。推到Quay.io需要3.5分鐘當所有的圖像都已經在服務器上!推到碼頭工人樞紐約需12分鐘

因爲很多人在生產中使用Docker,所以在某些地方顯然有些問題,這些時間與持續交付完全相反。

如何讓這個運行更快?其他人也看到這種表現嗎?它是否與註冊表服務有關,或者與我的本地機器有關?

我使用在Mac OS X

回答

1

泊塢出於這個原因,企業通常在本地網絡上運行自己的註冊表。這也使組織能夠控制自己的數據並避免依賴外部服務。

您還會發現,Google Container Engine和Amazon Container Service等雲主機託管註冊表以向用戶提供快速的本地下載。

+1

恐怕這個答案會導致幾個混淆。關於「控制我自己的數據」和「依靠外部服務」的觀點是無關緊要的。所有代碼完全在雲上運行,而我的源代碼仍然在Github上。其次,我不明白雲提供商如何擁有快速的本地**註冊管理機構?據我所知,這些只是致力於單個公司/賬戶的註冊管理機構。所以你建議這個性能問題的根源在於Quay和Docker沒有以足夠的容量運行他們的服務? – user1496984

1

是否在previews answer中說過,您應該使用本地註冊表。這不是很難安裝和使用它,你可以找到信息,如何開始使用它。這可能會更快,因爲您不受限於提供商的上傳速度限制。順便說一句,您可以隨時將本地註冊表中的映像推送到Docker Hub或其他本地註冊表中(例如,安裝在您的客戶網絡中)。

另外一件事,就持續集成和交付而言,我可以建議使用一些持續集成服務器,它可以在Linux操作系統上自動構建映像,而不需要使用boot2docker或docker-機。出於測試和開發的目的,您可以在本地構建您的圖像,而無需推送到遠程註冊表。

+0

是的,3.5分鐘到Quay.is可能是由於OPs寬帶上傳帶寬。 –

+0

@stanislav感謝您的回覆。我會考慮運行一個本地註冊表,但要清楚的是,你認爲問題在於碼頭和Docker Hub沒有足夠的容量給每個人? – user1496984

+0

@AdrianMouat感謝您的評論,但是我的上傳帶寬如何成爲瓶頸?如果對於每張圖片,它都會說「跳過」?您是否建議Docker上傳整個映像,計算註冊表中的校驗和,將其與之前的校驗和進行比較,然後重新上傳它們,如果它們不同? – user1496984

0

只是說明:我運行我自己的docker註冊表,這是本地機器我發出「docker push」命令,它仍然需要大量的時間。這絕對不是來自磁盤的I/O速率問題,因爲它們是由SSD支持的(並且爲了澄清,它們的性能高於使用它們的其他任何東西〜500 + MB /秒)。但是,docker push命令似乎只要將它發送到遠程站點就可以。我認爲除了「帶寬」問題之外還有一些問題。我的懷疑是,無論我的註冊表是否是本地的,它仍然試圖使用NIC來傳輸數據(這似乎是有意義的,因爲需要將URI作爲推送目標,而註冊表本身就是一個容器)。

這就是說,我可以將相同的文件複製到最終位於本地註冊表中比push命令更快的位置。也許解決方案就是這樣。但是,有一點很明確,就是單純的問題不是帶寬本身,而是一般的數據通路。

無論如何,運行本地註冊表不可能(完全)解決OP的問題。雖然我剛開始進行調查,但我懷疑需要對碼頭進行代碼更改才能解決此問題。我不認爲這是一個錯誤,而是一個設計挑戰。 URI和/或主機 - >主機通信需要網絡堆棧,即使源和目標是同一臺機器/主機/容器。

+0

您的評論儘管有用,但並未完全回答問題。您可以嘗試縮短評論並將其添加爲評論。 –

+0

我的意思是它是一個評論,對不起。我對iPost是一種新鮮感。我是一個數據隱士。 –

+0

沒有傷害:-)。您可以點擊問題下的「添加評論」添加評論。您也可以通過點擊答案下的「刪除」來刪除答案。答案被投票,並應解決問題,並具有最低的質量。請參閱[這裏](https://stackoverflow.com/help/how-to-answer)關於答案應該是什麼樣的。 –