DevOps 中的容器化:你需要知道的一切
已發表: 2022-09-16容器化允許企業虛擬化操作系統並將應用程序安裝在稱為容器的隔離區域中。
容器化是一種創建應用程序的現代方式。
讓我們深入了解遺留系統及其架構如何遇到障礙,以至於人們開始引用“我的代碼不起作用; 我不知道為什麼! 代碼有效,但不知道為什麼!”
隨著應用程序的發展,應用程序的定義從僅僅一段代碼變為一組代碼、二進製文件、配置和運行環境。
想像一下我們早期經常遇到的情況。 在筆記本電腦上,開發人員開發了一些 Java 8 代碼。 相同的代碼在 Web 服務器/VM 上不起作用。 經過多方排查,發現服務器的Java版本是JDK11。
使困惑?
代碼保持不變,但支持該代碼的軟件具有不同的配置。 由於一些小事,開發人員遇到了很多麻煩。 將一段代碼從 Linux 傳輸到 Windows 操作系統時也是如此。
遺留系統的管理開銷、可擴展性和成本效率低導致了雲計算的採用,其中工作負載託管在各種雲提供商提供的虛擬機上。 那不過是虛擬化。
簡單來說,虛擬化是雲提供商/數據中心提供的單個服務器/VM 上的多個操作系統 (OS)。 虛擬化可以隔離應用程序,而無需物理硬件或知道內部是什麼。
然而,這種架構也沒有經受住時間的考驗,容器化應運而生。
容器化專注於將操作系統分解成塊,通過擁有它們的操作系統可以更有效地使用這些塊。 它是一個運行應用程序代碼的小型迷你環境,無需擔心虛擬機中運行的操作系統或硬件。
現在,讓我們詳細討論容器化。
什麼是容器化?

容器化是一種操作系統虛擬化,其中應用程序的所有組件,包括環境,也就是它將在其中運行的操作系統,都被打包到 VM 上稱為容器的隔離空間中。 這些容器的底層操作系統是相同的,但它們有自己的作為配置的一部分。
容器不是廣泛的、沉重的系統。 相反,它們體積小、便攜且易於運行或設置。 當開發人員將應用程序容器化時,容器與主機操作系統分離,並且對系統資源的訪問權限有限,就像輕量級虛擬機一樣。 容器化應用程序可以在不同的基礎架構上運行,例如裸機、雲或虛擬機,而無需重寫。
容器化技術如何工作?
容器化的工作原理是將應用程序所需的所有部分放入單個虛擬單元中。
容器化允許開發人員將應用程序代碼與其配置文件、依賴項和庫捆綁在一起。 將該單個軟件包(容器)與主機操作系統分開。 打包讓容器獨立並變得可移植,因此它可以在任何平台或云上毫無問題地運行。 將其視為樂高板上的小樂高積木。
但是,容器不直接使用虛擬化的硬件或內核資源。 容器不關心或擔心虛擬機上運行的操作系統。
相反,容器在專門設計用於處理容器和隱藏底層資源的平台“頂部”運行。 容器在速度和大小方面優於虛擬機和裸機服務器等替代品,因為它們僅包含應用程序最重要的組件和依賴項。 它們還支持在各種上下文中執行相同的應用程序,而無需處理相關問題。
容器化與虛擬化
不熟悉應用程序生命週期的人並不總是知道容器化(Docker 等軟件製作的軟件)與傳統服務器虛擬化(HyperV 和 VMware ESXi 等虛擬機管理程序支持的內容)之間的區別。 然而,這就是不同之處:

在服務器虛擬化中,硬件是隱藏的,操作系統在其上運行。 容器化是一種在操作系統之上運行應用程序的方法。 虛擬化依賴於底層主機操作系統,但不擔心硬件,除非它有足夠的資源。 這是完整的差異列表。
財產 | 容器化 | 虛擬化 |
環境 | 容器與在多個環境中運行的操作系統打包在一起。 | 虛擬化建立在主機之上,由操作系統隔開,表現為一台機器。 |
啟動 | 容器在啟動時花費的時間非常少。 | 虛擬機需要幾分鐘才能啟動。 |
資源 | 這些是一個根本不佔用大量資源的小環境。 | 虛擬機資源密集,沒有擴展能力。 |
執行 | 底層硬件由管理程序虛擬化(使用相同的硬件)。 | 容器使操作系統虛擬化(使用相同的操作系統)。 |
成本 | 實施起來更容易且成本低廉。 | 這些都是昂貴的,並且需要根據機器的大小向雲提供商支付巨額賬單。 |
容器化層

硬件基礎設施:每個應用程序的基礎是可以投入生產使用的有形資源的集合。 為了使容器正常運行,這些資源必須存在。 它們可以在筆記本電腦上運行,也可以在連接到雲的眾多數據中心之一上運行。

主機操作系統:硬件層之後是下一層,主機操作系統。 與硬件層一樣,這可能就像在任何個人計算機上安裝 Windows 或 *nix 一樣簡單,也可以完全由雲服務提供商處理。
容器引擎:這就是事情開始發生令人興奮的轉折的地方:容器引擎。 容器引擎是安裝在主機操作系統之上的軟件,負責虛擬化容器化應用程序所需的資源。
在計算機上執行 Docker 時,這一層是最容易掌握的。 該層確保容器啟動並運行並管理其整個生命週期。
容器:容器化應用程序是包含應用程序需要執行的所有庫、二進製文件和配置設置的代碼。 容器也稱為 Docker 容器。 容器化的應用程序在“用戶空間”中作為其進程運行,這與操作系統的內核不同。
容器化的好處

可移植性:人們抱怨應用程序在一種環境(例如,登台)中運行良好,但在另一種環境中卻不行。 這是一個 DevOps 困境。 通常,問題是環境差異。 也許更新了依賴項。 相同的容器鏡像,包括依賴項,可以在任何地方通過容器化執行。
快速:容器啟動速度比虛擬機或裸機服務器快。 容器在幾秒鐘內啟動,而虛擬機則需要幾分鐘,具體取決於資源和應用程序大小。
資源高效:容器比虛擬機更高效,因為它們只包含特定於應用程序的文件。 虛擬機是千兆字節,而容器是兆字節。 容器讓團隊可以有效地使用服務器資源。
部署-開發簡單性:便攜式容器可以在任何地方使用。 容器化應用程序快速、小巧且易於部署。
容器化讓您的團隊可以在本地和生產環境中構建相同的映像。 容器應用程序可以減少某些東西在一個地方工作但在另一個地方不能工作的情況。 CI/CD 管道支持容器構建。 這些好處提高了團隊的生產力。
故障排除:容器化隔離和分離應用程序。 一個容器的故障不會影響其他容器的功能。 開發團隊可以在不影響其他人的情況下識別和修復有故障的容器。 容器引擎可以使用 SELinux 訪問控制來查找和隔離容器問題。
安全性:容器化程序可防止惡意軟件損害其他應用程序或主機系統。 設置指定的安全權限以阻止不需要的組件進入其他容器或限制通信。
可管理性:使用容器編排平台自動化容器化工作負載和服務。 容器編排簡化了管理工作,包括發布新的應用程序版本、擴展容器化程序以及監控、日誌記錄和調試。
連續性:一個容器的故障不會影響其他容器。 開發人員可以修復一個容器而不影響其他容器。 容器化保證了操作的連續性。
結論
容器化是最近的一個軟件開發概念,隨著時間的推移將變得更加高效。 它的支持者相信它可以幫助開發人員更快速、更安全地創建和部署軟件和應用程序。
隨著容器化生態系統的成熟和發展,行業參與者預計價格將會下降。 然而,操作問題得到了解決,但在如此多的微不足道的環境中維護開銷卻退居二線。 容器化的下一個重要事情是編排。
現代應用程序不會止步於此。 Kubernetes 是容器化和微服務領域的下一件大事。 Kubernetes 使擴展和管理容器安裝變得更加容易。 K8s 管理比 Docker 或 LXC 更大的容器部署。 K8s 是一個廣受歡迎的容器管理工具。
現在容器已經成為過去,一般建議是跳到 K8s。