2014-01-30 58 views
14

我注意到Dockerfile中的每一行都創建一個單獨的圖像。創建的圖像數量是否有限制?Dockerfile中的命令數

我們是否應該嘗試做一個而不是?

如果我們使用像奎伊這樣的服務,這會有什麼不同?

謝謝!

回答

14

由於Alister said,如果使用AUFS文件系統,Docker映像中的層數有上限。 在Docker 0.7.2版中,限制提升到127層(changelog)。

由於這是底層聯合文件系統(在AUFS的情況下)的限制,使用碼頭或其他私人註冊表不會改變結果。但是你可以使用不同的文件系統。

當前的替代文件系統是使用devicemapper(請參閱CLI docs)。這些其他文件系統可能對層數有不同的限制 - 我不認爲devicemapper有上限。

你是對的,通過在單個RUN語句中運行多個命令,可以減少層數。

或者,如果您確實需要大量圖層來構建圖像,則可以構建圖像直至達到最大值,然後使用docker export創建圖像文件系統的未分層副本。然後docker import再次將其重新轉換爲圖像,這次只有一層,並繼續構建。你雖然失去了歷史。

5

有一個限制,42 - 顯然是AUFS強加的限制。

通過將個別RUN命令中的操作放入腳本中,然後運行該腳本,可以有所幫助。然後你會得到一個更大的圖像層,而不是一些較小的文件進行合併。更小的圖像(具有多條RUN線)使初始測試更加容易(因爲RUNlist末尾的新增加可以重新使用之前的圖像),所以通常在合併線之前等待Dockerfile穩定下來。

通過添加一個完整的目錄而不是多個單獨的文件,您還可以減少潛在的圖像數量,當ADD ing文件。

+0

感謝您的回覆。因此,如果我使用具有41行的Dockerfile創建一個圖像,並將其推送到Quay,並創建另一個使用我的初始圖像作爲基礎的圖像,則可以將另外41行添加到Dockerfile? –

+0

@RezaSanaie我的理解是,這是不正確的。推送的第一個圖像包含41層。如果你依賴於這些,你將擁有這41層,然後你添加任何額外的東西。 AUFS用於保持分層文件系統。我認爲這在Docker中是一個巨大的限制,但也許他們正在等待AUFS處理上游的更多層。 – d11wtq

+0

因此,最好的方法是添加一個安裝腳本並運行它。那是對的嗎? –

相關問題