2014-01-13 33 views
0

是否有可能替換碼頭圖像層次中的圖像? Docker提供了一種將圖像插入到層次結構中的功能,但是是否可以替換層次結構中的圖像?我的用例是用一些系統庫創建一個映像,並在庫升級到新版本後用另一個替換這個映像。我想通過替換基本映像來測試軟件與較新庫的兼容性。更改碼頭圖像層次

回答

4

一種解決方案是使用下面的方法:

  • 構建一個基本圖像(或標記的現有的一個)作爲例如mybase
  • 與Dockerfile開始FROM mybase
  • 然後,當你想用新庫來測試構建您的軟件,建立一個新的mybase圖像(那些庫),並重新構建軟件

同樣,當我有一個建立在Ubuntu之上的容器,它通常以FROM ubuntu:12.04開頭。在幾個月內,當14.04 LTS將被釋放時,我計劃用FROM ubuntu:14.04更新我的Docker文件。

如果由於某種原因,你要更新尚未建有Dockerfiles容器,還有另外一種方法,但它需要多克的圖像格式,它不能保證工作的更深入的瞭解在所有情況下。

另一種方法是在現有圖像上使用docker save。它會輸出一個包含構成圖像的所有圖層的tarball。這些圖層將分成兩組,我會隨意稱爲「上」和「下」圖層。 「較低」層包含您要升級的基本系統映像和庫。 「上層」圖層包含您想要保持不變的應用程序。這個想法是將上層的layer.tar文件放在一邊,然後構建新的基礎圖像(如果您願意的話,可以創建較低層的新版本),然後將較高層應用於新較低層的頂層。

中最困難的部分是:

  • 解碼圖像祖先知道你應該保留哪些圖層,以及順序,你應該應用它們;
  • 應用圖層,如果它們不僅添加/替換文件,而且還會刪除一些圖層。

如果你想探索這條路,首先,請確保您瞭解basics about layers :-)

+0

事實上,這可能是一個解決方案。我的計劃是建立一個高效的系統,這個系統可以被提交併推入私人碼頭索引。具有真實數據的容器不能被Dockerfile引導的映像替換,這就是我的想法替代較低層的原因。想知道這是否可能。 – paweloque

+0

行,理解。讓我更新我的答案,我可能有你的東西:) – jpetazzo

+0

...更新!我希望這有幫助。 – jpetazzo