天天看點

Dockerfile最佳實踐(二)

容器模型是程序而不是機器。如果你認為你需要開機初始化,那麼你就錯了。

即使你不喜歡這個題目但它是很棒的一個功能。我把大部分 GitHub 倉庫添加到可信任建構,是以當我送出一個新鏡像之後不久,就在等待索引。另外,我不必再建立單獨的 Dockerfile 倉庫與他人分享,它們都在同一個地方。

請記住,這不是你嘗試新東西的試驗場。在你推送之前,請在本地先建構一下。Docker 可以確定你在本地的建構和運作,與你推送到任何地方的建構和運作是一樣的。本地開發和測試、送出和推送、以及等待索引上的官方鏡像都是建立在可信任建構的基礎之上的。

更新将發生在基礎鏡像裡,你不需要在你的容器内來<code>apt-get upgrade</code>更新。因為在隔離情況下,如果更新時試圖修改 init 或改變容器内的裝置,更新可能會經常失敗。它還可能會産生不一緻的鏡像,因為你不再有你的應用程式該如何運作以及包含在鏡像中依賴的哪種版本的正确源檔案。

如果基礎鏡像需要安全更新,那麼讓上遊的知道,讓他們給大家更新,并確定你再次建構的一緻性。

有些鏡像比其他的更臃腫。我建議使用<code>debian:jessie</code>作為你的基礎鏡像。如果你熟悉Ubuntu,你将發現一個更輕量和巧妙的自制 debian,它足夠小并且沒有包含任何不需要的包。

對于你的基礎鏡像這是非常重要的。Dockerfile 中<code>FROM</code>應始終包含依賴的基礎鏡像的完整倉庫名和标簽。比如說<code>FROM debian:jessie</code>而不僅僅是<code>FROM debian</code>。

您的<code>apt-get update</code>應該與<code>apt-get install</code>組合。此外,你應該采取<code>\</code>的優勢使用多行來進行安裝。

謹記層和緩存都是不錯的。不要害怕過多的層,因為緩存是大救星。當然,你應當盡量使用上遊的包。

我不是在談論運作 debbootstrap 來制作自己的 debian。你不是 tianon(Tianon Gravi),沒有人想要你認為别人需要你的 500mb 的狗屎垃圾基礎鏡像。我說的是,如果你要運作 python 應用程式需要有一個python基礎鏡像。前面示例中用于建構  <code>crosbymichael/python</code> 的 Dockerfile 也被用于其他很多建構 Python 應用程式的鏡像。

另一個:

正如你看到的,這使得使用你的基礎鏡像非常小,進而使你集中精力在應用程式上。

讓我知道你在想什麼,或者如果你有任何其它的問題,可以在評論中留言。

本文轉自 h2appy  51CTO部落格,原文連結:http://blog.51cto.com/h2appy/1865366,如需轉載請自行聯系原作者