虛擬化 VS 容器化

likeo 9年前發布 | 12K 次閱讀 容器化

容 器為應用程序提供了隔離的運行空間:每個容器內都包含一個獨享的完整用戶環境空間,并且一個容器內的變動不會影響其他容器的運行環境。為了能達到這種效 果,容器技術使用了一系列的系統級別的機制諸如利用Linux namespaces來進行空間隔離,通過文件系統的掛載點來決定容器可以訪問哪些文件,通過cgroups來確定每個容器可以利用多少資源。此外容器之 間共享同一個系統內核,這樣當同一個庫被多個容器使用時,內存的使用效率會得到提升。

對于系統虛擬化技術來說,虛擬層為用戶提供了一個完整的虛擬機:包括內核在內的一個完整的系統鏡像。CPU虛擬化技術可以為每個用戶提供一個獨享且和其他用戶隔離的系統環境,虛擬層可以為每個用戶分配虛擬化后的CPU、內存和IO設備資源。

虛擬化 VS 容器化

(題圖來自:securenetworksitc.com)

哪家強?

通常來說,這取決于你的需求。如果你只是希望將應用運行的實例進行隔離,那么對于管理應用運行環境、啟動應用實例以及控制資源開銷方面容器將是一個 極為高效的工具。像Docker這一類的容器,其設計原則就是為了解決這種應用環境的修改以及應用部署的問題,并且這十分符合DevOps理念(你可能希 望知道更多關于DevOps理念的內容)。

如果你從服務器虛擬化的角度來尋找最好的環境隔離方案,那么系統級的虛擬化是更好的方案:和容器相比,鄰居租戶(Noisy neighbours )對系統的影響在虛擬化的方案下將不是一個問題。盡管現在很多容器都在專注于提高其隔離能力,但是虛擬機的隔離還是要優于容器。從物理服務器過渡到虛擬服 務器是一個很自然的過程,并且現在針對虛擬服務器的管理的生態系統也很完善。

在z系統中,Linux具有很好的伸縮性(運行容器),但是z是一個極度高效虛擬化(運行虛擬服務器)的平臺,它繼承了整個系統架構。盡管沒有精確的測量,將虛擬化和容器技術相結合,在z系統中會比其他平臺要容易。

還有第三條路:兩者兼而有之。

有多種方式可以將系統虛擬化及容器技術相結合:

1.一個容器中運行一個虛擬機

虛擬化 VS 容器化 Docker 在部署容器方面十分靈活。其中一個選擇(execution driver)是利用KVM鏡像。這樣就可以在最好的隔離性情況下發揮DevOps所擅長的使用Docker各種方式。但是這也付出了需要在啟動容器時啟 動整個操作系統實例的代價。這也就意味著較長的啟動時間以及低效的內存使用,只能通過內核共享內存(KSM)來提升內存利用率。這種方法效果和效率都不理 想,但是這是一個好的開始。

2.一個虛擬機中運行一個容器

虛擬化 VS 容器化

與 之相反的,你一可以在虛擬機中啟動一個容器。這里的虛擬機并不是由Docker控制,而是通過現有的虛擬化管理設施來控制。一旦系統實例啟動,就可以通過 Docker來運行容器而武器其他特殊的設置。同時,由于不同容器運行在不同的虛擬機上,容器之間也能有很好的隔離。而內存的使用率需要通過虛擬層的內存 共享來提升。

2b.一個虛擬機中運行多個容器

虛擬化 VS 容器化

對于多租戶的情況,可以用另一種形式在虛擬機中運行Docker。這種情況下,我們假設在不同租戶的容器之間需要強隔離,而對于同一用戶的不同容 器,簡單的Linux容器隔離已經足夠。這樣我們就可以在減少虛擬機個數的情況下保證租戶之間的隔離,同時可以利用Docker帶來的各種便利。

總結來說:需要根據實際需求進行選擇。

 本文由用戶 likeo 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!