Container 是一個輕量級的獨立包,它封裝了一個完整的運行時環境,包括應用程序及其依賴項(庫、二進制文件和任何其他配置文件),從而提高了應用程序的可移植性、可擴展性、安全性和敏捷性。
容器受到開發人員和運營商的歡迎,因為它們提供了一種直接的方式來部署和管理應用程序,而不管目標環境如何。他們 通過改進開發和運營團隊之間的交接來促進DevOps 和 DevSecOps實踐。
容器高效地消耗資源,實現高密度和資源利用率。盡管容器幾乎可以用于任何應用程序,但它們經常與微服務相關聯 ,其中多個容器運行單獨的應用程序組件或服務。組成應用程序的容器通常使用容器編排平臺(例如 Kubernetes )進行協調和管理。
容器是通過將來自一個或多個存儲庫的多個映像的應用程序以及任何庫或其他應用程序依賴項打包來創建的,從而消除了可移植性和兼容性問題。
容器與虛擬機
每個虛擬機 (VM) 運行一個操作系統的完整或部分實例,而多個容器共享一個操作系統實例。容器包括運行應用程序所需的一切,使多個容器化應用程序能夠在單個主機系統上獨立運行。因為可以在一個虛擬機中運行多個容器, 所以這兩種技術可以一起使用
使用容器有什么好處?
使用容器構建應用程序可以加速新功能的交付并鼓勵持續創新的環境。好處包括:
敏捷。改進的開發人員敏捷性推動了生產力的提高和應用程序開發的速度。容器簡化 了CI/CD管道,是DevOps 團隊和微服務部署 的理想選擇 。
可擴展性和高可用性。使用 Kubernetes,容器部署可以隨著工作負載需求的變化而自動擴展或縮減,從而提高應用程序的可用性。
便攜性。與虛擬機相比,容器消耗的資源更少,重量也更輕。容器化應用程序與基礎架構無關,無論部署在何處,它們的運行方式都是相同的。
彈性。容器化應用程序與操作系統和其他容器隔離和抽象;一個容器可以在不影響其他正在運行的容器的情況下發生故障。
容器標準
容器格式和運行時環境的標準由開放容器倡議 (OCI) 控制,該項目成立于 2015 年,旨在創建開放的行業標準。OCI 目前提供兩種規范:運行時規范(runtime-spec)和圖像規范(image-spec)。
容器安全
容器需要改變安全策略的實施和管理方式。應使用DevSecOps方法盡可能將安全性構建到容器生命周期中 。安全團隊與開發和運營團隊合作,調整現有的治理和合規策略,以適應新工具和對應用程序生命周期的更改。
容器自動化
手動工作會減慢開發團隊的速度。容器自動化使開發人員能夠專注于代碼而不是打包。容器鏡像是分層構建的。使用自動化的容器構建方法,每當層更改時,只需更新該層。例如,如果只需要更新系統庫,則只需重建包含庫的層。由于其他層保持不變,因此減少了測試和驗證負擔,使更新的容器能夠更快、更頻繁地投入生產。
Docker
自 2013 年推出以來,Docker 幾乎是容器的代名詞,并且繼續被用于構建容器鏡像。Docker 環境包括容器運行時以及容器構建和鏡像管理。因為 Docker 構建了一個 OCI 標準的容器鏡像,所以 Docker 鏡像將在任何符合 OCI 的容器運行時上運行。
Kubernetes
Kubernetes 是一種開源容器編排器,已成為事實上的標準。Kubernetes 通過聲明性配置和自動化來自動化容器的部署、負載平衡、資源分配和安全實施。它使容器化應用程序保持在所需狀態下運行,確保它們具有可擴展性和彈性。容器編排有助于管理容器生命周期的復雜性。這對于具有大量容器的分布式應用程序尤其重要。
Kubernetes 正在轉向容器運行時接口 (CRI),它支持更廣泛的容器運行時集,并在不同運行時之間實現順暢的互操作性。 2020 年 12 月宣布棄用 Docker 運行時 與 Kubernetes 一起使用。
容器用例
對于開發人員
- 提高跨不同平臺和配置的應用程序可移植性,以便在一個語言編譯器或解釋器版本上開發的代碼可以在后續版本上完美運行,無需修改。
- 開發人員無需在相同的基礎架構上進行開發、測試和部署,因此在筆記本電腦上編寫代碼的開發人員可以確信應用程序將在任何其他基礎架構上按需要運行,無論是本地服務器還是基于云的 VM .
- 促進 CI/CD 等敏捷開發流程,加快代碼接受和部署。
用于 IT 運營
- 通過以輕量級方式與其他應用程序隔離來提高應用程序的安全性。
- 跨不同操作系統版本、網絡拓撲或存儲配置以及云平臺的容器化應用程序的無縫遷移。
- 通過使多個應用程序容器在單個操作系統實例上運行來提高 IT 效率。由于容器的大小通常為數十兆字節,而虛擬機的大小通常為十吉字節或更多吉字節,因此可以在單個服務器實例上運行大量容器。
通過在幾毫秒而不是幾分鐘內啟動額外的容器實例來啟動虛擬機,從而提供極高的按需可擴展性。