Docker容器中應避免的那些事兒
毋庸置疑,容器已經成為企業IT基礎設施中必不可少的部分,它具有許多的優點,但容器是一次性的。那麼該如何保持容器的良好效益呢?以下將介紹Docker容器中應避免的10件事。 |
毋庸置疑,容器已經成為企業IT基礎設施中必不可少的部分,它具有許多的優點,比如:
- 容器是不可變的——作業系統,庫版本,配置,資料夾和應用程式都包裝在容器內。你保證在質量檢查中測試過的同一映象將以相同的行為到達生產環境。
- 容器很輕——容器的記憶體佔用量很小。容器將只為主要程式分配記憶體,而不是數百或數千MB。
- 容器非常快——可以像啟動典型 Linux程式一樣快地啟動容器。你可以在幾秒鐘內啟動一個新容器,而不是幾分鐘。
但是,許多使用者仍然像對待典型虛擬機器一樣對待容器,而忘記了容器具有重要的特徵:即容器是一次性的。
這種特徵迫使使用者改變他們對如何處理和管理容器的看法。那麼該如何保持容器的最佳效益呢?以下將介紹Docker容器中應避免的10件事。
1. 不要將資料儲存在容器中,因為你可以停止,銷燬或更換容器。在容器中執行的應用程式版本1.0應該容易地由版本1.1替換,而不會造成任何影響或資料丟失。因此,如果需要儲存資料,請批量儲存。在這種情況下,還應該注意兩個容器是否在同一捲上寫入資料,因為這可能會導致損壞。確保你的應用程式是為了寫入共享資料儲存。
2. 不要將應用程式分為兩部分進行交付。有些人看到像虛擬機器這樣的容器,大多數人傾向於認為他們應該將應用程式部署到現有的執行容器中。在開發階段,你需要不斷進行部署和除錯,這是正確的。但對於一個連續傳遞(CD)管道QA和Production,你的應用程式應該是映象的一部分。
3. 不要建立大映象,因為大映象將很難分發。確保僅具有執行應用程式/程式所需的檔案和庫。不要安裝不必要的軟體包或執行將許多檔案下載到新映象層的“更新” 。
4. 不要使用單層映象,為了有效利用分層檔案系統,請始終為作業系統建立自己的基礎映象層,為使用者名稱定義建立另一層,為執行時安裝建立另一層,為配置建立另一層,最後是應用程式的另一層。重新建立,管理和分發映象將更加容易。
5. 不要從正在執行的容器中建立映象。換句話說,不要使用“ docker commit”來建立映象。這種建立映象的方法不可複製,應完全避免。始終使用完全可複製的Dockerfile或任何其他S2I(從源到映象)方法,如果將Dockerfile儲存在原始碼控制儲存庫(git)中,則可以跟蹤對Dockerfile的更改。
6. 不要只使用“最新”標籤,對於Maven使用者,最新標籤就像“ SNAPSHOT”一樣。由於容器的分層檔案系統性質,因此鼓勵使用標籤。幾個月後生成映象並發現你的應用程式無法執行是因為父層(Dockerfile中的FROM)被不相容向後的新版本或錯誤的新版本所取代,你不會感到驚訝從構建快取中檢索了“最新”版本。在生產環境中部署容器時,也應避免使用“最新”標籤,因為你無法跟蹤正在執行哪個版本的映象。
7. 不要在單個容器中執行多個程式。容器非常適合執行單個程式(http守護程式,應用程式伺服器,資料庫),但是如果有多個程式,則管理起來可能會遇到更多麻煩,檢索日誌,並分別更新流程。
8. 不要將憑據儲存在映象中。使用環境變數,你不想對映象中的任何使用者名稱/密碼進行硬編碼。使用環境變數從容器外部檢索該資訊。這個原理的一個很好的例子是Postgres映象。
9. 不要以root使用者身份執行程式。“預設情況下,docker容器以root使用者身份執行。隨著docker的成熟,可能會提供更多安全的預設選項。目前,要求root使用者對其他人是危險的,可能並非在所有環境中都可用。你的映象應使用USER指令為執行容器指定一個非root使用者。
10. 不要依賴IP地址。每個容器都有自己的內部IP地址,如果你啟動和停止容器,它可能會更改。如果應用程式或微服務需要與另一個容器通訊,請使用環境變數將正確的主機名和埠從一個容器傳遞到另一個容器。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2700638/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- https的那些事兒HTTP
- webpack的那些事兒Web
- Docker的那些事兒—Docker卷資料恢復或遷移(33)Docker資料恢復
- 聊聊中後臺前端應用:上下文的那些事兒前端
- PHP那些事兒PHP
- Redis那些事兒Redis
- babel那些事兒Babel
- Eval家族的那些事兒
- Web自適應佈局那些事兒Web
- Flutter 中“倒數計時”的那些事兒Flutter
- 聊聊Django應用的部署和效能的那些事兒Django
- Android 應用啟動那些事兒,Application? Context?AndroidAPPContext
- 雲原生java的那些事兒Java
- util.promisify 的那些事兒
- iOS 截圖的那些事兒iOS
- HTTP 快取的那些事兒HTTP快取
- 漏洞檢測的那些事兒
- 關於 sudo 的那些事兒
- 面試的那些事兒--01面試
- 淺談AsyncLocal,我們應該知道的那些事兒
- Cocos Creator 中的動作系統那些事兒
- 測試在專案流程中的那些事兒
- MySQL優化那些事兒MySql優化
- 網路安全那些事兒
- 說說RCE那些事兒
- C語言那些事兒C語言
- PHP 閉包那些事兒PHP
- 字元編碼那些事兒字元
- 聊聊瀏覽器的那些事兒瀏覽器
- 綠帽子水管工的那些事兒
- Filebeat 收集日誌的那些事兒
- [apue] 等待子程式的那些事兒
- 我與軟考的那些事兒
- 「前端那些事兒」④ 效能監控前端
- 法線貼圖那些事兒
- 程式碼重構那些事兒
- Node檔案操作那些事兒
- JavaScript非同步處理的那些事兒JavaScript非同步