使用Docker時應該避免這10件事
容器可以解決很多問題,並且具有諸多優勢,當你投身其中時便會發現其奧妙所在。
第一:容器是不可變的
作業系統,庫版本,配置,資料夾和應用程式都包裝在容器內。 您可以使用通過相同QA測試的映象,使產品具有相同的表現。
第二: 容器是輕量級的
容器的 記憶體佔用很小。沒有成百上千的MB,容器只會分配主程序的 記憶體。
第三: 容器是快速的
你可以像一個典型的linux程序一樣快速啟動一個容器。只需要幾秒鐘,您就可以啟動一個新的容器。
然而,許多使用者仍然像對待典型的虛擬機器那樣對待容器。他們似乎都忘記了容器的重要特性:容器是一次性的。
容器的準則:
“容器是臨時的”。
這個特性迫使使用者改變處理和管理容器的心態;我將會向你說明在容器中不應該做的那些事,以確保容器可以發揮出最佳效果:
1) 不要將資料儲存在容器中
容器可以被停止,銷燬或者替換。 在容器中執行的應用程式版本1.0很容易被1.1版本替換而不會產生任何影響或資料丟失。 因此,如果您需要儲存資料,請在卷中進行。 當然在這種情況下,您還應該注意,如果兩個容器在相同的捲上寫入資料,有可能會導致損壞。 請確保您的應用程式被設計為寫入共享資料儲存。
2)不要將應用程式分成兩個部分
有些人認為容器像虛擬機器,大多數人往往認為他們應該將應用程式部署到現有的執行容器中。 在開發階段這樣是可以的,您需要連續部署和除錯;但對於連續交付(CD)管道到QA和產品,您的應用程式應該是映像的一部。
3)不要建立大映象
大影象將更難分發。 確保您僅具有執行應用程式/程序所需的檔案和庫。 不要安裝不必要的包或執行“更新” (yum更新) ,下載許多檔案到一個新的影象層。
4)不要使用單層映象
要有效地使用分層檔案系統,始終為您的 作業系統建立您自己的基本映象層, 使用者名稱定義的為一個圖層, 執行時安裝的為一個圖層,配置的為一個圖層,最後為您的應用程式建立一個層。 這樣將更容易重新建立,管理和分發您的影象。
5)不要從正在執行的容器中建立映象
換句話說,不要使用“docker commit”建立映象。 這種建立影象的方法不可重現,應該完全避免。 始終使用Dockerfile或任何其他完全可重複的S2I(源影象)的方法,如果將它儲存在原始碼控制儲存庫(git)中,您可以跟蹤對Dockerfile的更改。
6)不要只使用“最新” 標籤
最新 標籤就像“Maven使用者快照”。基於容器分層檔案系統的性質,標籤實際上是被鼓勵使用的,你應該不會希望看到當你幾個月後建立映象時的不相容,或從建立快取的檢索中檢索到了一個錯誤的“最新”版本。當您不能跟蹤正在執行的版本時,在生產環境部署容器時應該避免“最新”標籤的出現。
7)不要在一個容器中執行多個程序
容器可以完美的執行單個程序(http守護程序,應用程式 伺服器,資料庫),但如果你有一個以上的程序,你可能會在管理上,檢索日誌,以及單獨地更新的過程中遇到更多的麻煩。
8)不要在映象中儲存憑證
使用環境變數 – 不要對映象中的任何使用者名稱/密碼進行硬編碼。 使用環境變數從容器外部檢索此資訊。 這個原則的一個很好的例子是Postgres影象 。
9)不要以root使用者身份執行程序
“預設情況下,docker容器會以root身份執行。隨著Docker的成熟,更安全的預設選項可能會變得可用。 現在,要求root對其他人來說是危險的,並且可能在所有環境中都不可用。 您的映象應該使用USER指令來為容器指定非root使用者
10)不要依賴IP地址
每個容器都有自己的內部IP地址,如果啟動和停止容器,它的地址可能會改變。 如果您的應用程式或微服務需要與另一個容器通訊,請使用環境變數將正確的主機名和埠從一個容器傳遞到另一個容器。
作者:Rafael Benevides