容器技術概覽

【摘要】關於容器,這裡有你想要的一切,包括容器與虛擬機的區別,容器的優缺點以及容器的不同種類。

容器是輕量級的操作系統級虛擬化,可以讓我們在一個資源隔離的進程中運行應用及其依賴項。運行應用程序所必需的組件都將打包成一個鏡像並可以復用。執行鏡像時,它運行在一個隔離環境中,並且不會共享宿主機的內存、CPU 以及磁碟,這就保證了容器內進程不能監控容器外的任何進程。

容器與虛擬機之間的差別

虛擬機通常包含整個操作系統及其應用程序,同時也需要運行一個 hypervisor 來控制虛擬機。

因為虛擬機包括操作系統,所有大小一般是幾個 G。使用虛擬機的缺點之一是啟動操作系統以及初始化託管應用會花費幾分鐘的時間,但是,容器是輕量級的而且大小在 M 以內。性能方面,與 VM 相比,容器表現更加出色,並且幾乎可以秒啟動。

Advertisements

容器究竟解決了什麼問題?

大多問題都是在運行環境改變時才顯現的,可能是這樣一種場景,開發者把代碼從開發環境 push 到測試環境然後到更上層的環境。比如開發者在 Windows 上編寫應用代碼,但是上層環境(測試、stage 或是生產環境)是基於 Linux 的。在這種情況下,當操作系統變化時,應用的某些功能可能就會出現問題。所以,基本上,當配套軟體環境不一樣的時候,間歇性故障的幾率就會更大。

正如 Docker 創始人 Solomon Hykes 所說,「測試環境使用 Python 2.7,但是生產環境使用 Python 3,那麼一些奇怪的事情就會發生。或者你依賴某個特定版本的 SSl 庫的行為,但是卻安裝了另外一個版本。在 Debian 上運行測試環境,但是生產環境使用 Redhat,那麼任何奇怪的事情都可能發生。」

Advertisements

改變可能不只是運行環境,也有可能是網路,Hykes 補充道,「網路拓撲可能不同,或者安全策略和存儲也有可能不同,但是,軟體需要在這些基礎設施上面運行。」

容器的優點

  1. 敏捷環境:容器技術最大的優點是創建容器實例比創建虛擬機示例快得多,容器輕量級的腳本可以從性能和大小方面減少開銷。

  2. 提高生產力:容器通過移除跨服務依賴和衝突提高了開發者的生產力。每個容器都可以看作是一個不同的微服務,因此可以獨立升級,而不用擔心同步。

  3. 版本控制:每一個容器的鏡像都有版本控制,這樣就可以追蹤不同版本的容器,監控版本之間的差異等等。

  4. 運行環境可移植:容器封裝了所有運行應用程序所必需的相關的細節比如應用依賴以及操作系統。這就使得鏡像從一個環境移植到另外一個環境更加靈活。比如,同一個鏡像可以在 Windows 或 Linux 或者 開發、測試或 stage 環境中運行。

  5. 標準化: 大多數容器基於開放標準,可以運行在所有主流 Linux 發行版、Microsoft 平台等等。

  6. 安全:容器之間的進程是相互隔離的,其中的基礎設施亦是如此。這樣其中一個容器的升級或者變化不會影響其他容器。

容器的缺點

  1. 複雜性增加:隨著容器及應用數量的增加,同時也伴隨著複雜性的增加。在生產環境中管理如此之多的容器是一個極具挑戰性的任務,可以使用 KubernetesMesos 等工具管理具有一定規模數量的容器。

  2. 原生 Linux 支持:大多數容器技術,比如 Docker,基於 Linux 容器(LXC),相比於在原生 Linux 中運行容器,在 Microsoft 環境中運行容器略顯笨拙,並且日常使用也會帶來複雜性。

  3. 不成熟:容器技術在市場上是相對新的技術,需要時間來適應市場。開發者中的可用資源是有限的,如果某個開發者陷入某個問題,可能需要花些時間才能解決問題。

容器分類

操作系統容器:如維基百科中所述,「操作系統層虛擬化是一種計算機虛擬化技術,這種技術將操作系統內核虛擬化,可以允許多個獨立用戶空間的存在,而不是只有一個。這些實例有時會被稱為容器、虛擬引擎、虛擬專用伺服器或是 jails(FreeBSD jail 或者 chroot jail)。從運行在容器中的程序角度來看,這些實例就如同真正的計算機。」

如上所述,容器共享宿主機的內核,但是提供用戶空間隔離。我們可以像在宿主機操作系統上一樣,在容器中安裝、配置以及運行應用程序。相似的是,分配給容器的資源僅對自己可見。就好比是,任何虛擬機不能獲取其他虛擬機的資源。

當需要配置大量具有相同配置的操作系統時,操作系統容器就會非常有用。因此,容器有助於創建模板,可以用於創建與另一個操作系統類似風格的容器。

要創建操作系統容器,我們可以利用容器技術,如 LXC,OpenVZ,Linux VServer,BSD Jails 和 Solaris 區域。

應用容器:如維基百科所述,「應用程序虛擬化是從其所執行的底層操作系統封裝計算機程序的軟體技術。一個完全虛擬化的應用,儘管仍像原來一樣執行,但是並不會進行傳統意義上的安裝。應用在運行時的行為就像它直接與原始操作系統以及操作系統所管理的所有資源進行交互一樣,但可以實現不同程度的隔離或者沙盒化。」

在這種情況下,術語 「虛擬化」 是指被封裝的工件(應用程序),這與其在硬體虛擬化中的含義截然不同,其中它涉及被抽象的工件(物理硬體)。

應用程序容器旨在作為單個進程進行打包和運行服務,而在 OS 容器中,可以運行多個服務和進程。

容器技術如 Docker 和 Rocket 就是應用程序容器的示例。

Advertisements

你可能會喜歡