當你最後投入容器的懷抱,發現它能解決很多問題,而且還具有衆多的優點:
第一:它是不可變的 – 作業系統,庫版本,配置,檔案夾和應用都是一樣的。您可以使用通過相同qa測試的鏡像,使産品具有相同的表現。
第二:它是輕量級的 – 容器的記憶體占用非常小。不需要幾百幾千mb,它隻要對主程序配置設定記憶體再加上幾十mb。
第三:它很快速 – 啟動一個容器與啟動一個單程序一樣快。不需要幾分鐘,您可以在幾秒鐘内啟動一個全新的容器。
但是,許多使用者依然像對待典型的虛拟機那樣對待容器。但是他們都忘記了除了與虛拟機相似的部分,容器還有一個很大的優點:它是一次性的。
容器的準則 :
“容器是臨時的”。
這個特性“本身”促使使用者改變他們關于使用和管理容器的習慣;我将會向您解釋在容器中不應該做這些事,以確定最大地發揮容器的作用。
1) 不要在容器中存儲資料 – 容器可能被停止,銷毀,或替換。一個運作在容器中的程式版本1.0,應該很容易被1.1的版本替換且不影響或損失資料。有鑒于此,如果你需要存儲資料,請存在卷中,并且注意如果兩個容器在同一個卷上寫資料會導緻崩潰。確定你的應用被設計成在共享資料存儲上寫入。
2) 不要将你的應用釋出兩份 – 一些人将容器視為虛拟機。他們中的大多數傾向于認為他們應該在現有的運作容器裡釋出自己的應用。在開發階段這樣是對的,此時你需要不斷地部署與調試;但對于品質保證與生産中的一個連續部署的管道,你的應用本該成為鏡像的一部分。記住:容器應該保持不變。
3) 不要建立超大鏡像 – 一個超大鏡像隻會難以分發。確定你僅有運作你應用/程序的必需的檔案和庫。不要安裝不必要的包或在建立中運作更新(yum更新)。
4) 不要使用單層鏡像 – 要對分層檔案系統有更合理的使用,始終為你的作業系統建立你自己的基礎鏡像層,另外一層為安全和使用者定義,一層為庫的安裝,一層為配置,最後一層為應用。這将易于重建和管理一個鏡像,也易于分發。
5) 不要為運作中的容器建立鏡像 – 換言之,不要使用“docker commit”指令來建立鏡像。這種建立鏡像的方法是不可重制的也不能版本化,應該徹底避免。始終使用dockerfile或任何其他的可完全重制的s2i(源至鏡像)方法。
6) 不要隻使用“最新”标簽 – 最新标簽就像maven使用者的“快照”。标簽是被鼓勵使用的,尤其是當你有一個分層的檔案系統。你總不希望當你2個月之後建立鏡像時,驚訝地發現你的應用無法運作,因為最頂的分層被非向後相容的新版本替換,或者建立緩存中有一個錯誤的“最新”版本。在生産中部署容器時應避免使用最新。
7) 不要在單一容器中運作超過一個程序 – 容器能完美地運作單個程序(http守護程序,應用伺服器,資料庫),但是如果你不止有一個程序,管理、擷取日志、獨立更新都會遇到麻煩。
10) 不要依賴ip位址 – 每個容器都有自己的内部ip位址,如果你啟動并停止它位址可能會變化。如果你的應用或微服務需要與其他容器通訊,使用任何命名與(或者)環境變量來從一個容器傳遞合适資訊到另一個。
本文來自雲栖社群合作夥伴“linux中國”
原文釋出時間為:2013-04-02.