運行應用程序所需的所有組件都將打包到壹個鏡像中,並可以重用。執行鏡像時,它運行在壹個隔離的環境中,不* * *享用主機的內存、CPU和磁盤,這就保證了容器內部的進程無法監控容器外部的任何進程。容器中的應用程序進程直接在主機的內核中運行。容器中沒有內核,也沒有硬件虛擬化,但是進程是封裝隔離的。
虛擬機:通常包含整個操作系統及其應用程序,還需要運行壹個?hypervisor?來控制虛擬機。
在壹組硬件被虛擬化之後,壹個完整的操作系統在其上運行,並且所需的應用程序進程在該系統上運行。
容量大小:
虛擬機:大小通常是幾g,
集裝箱:集裝箱重量輕,尺寸在100米以內.
性能:
虛擬機:啟動操作系統和初始化托管應用程序需要幾分鐘時間。
容器:性能更好,幾乎幾秒就能啟動。
建築:
1.敏捷環境:容器技術最大的優勢是創建容器實例比創建虛擬機實例要快得多,容器的輕量級腳本可以降低性能和大小方面的開銷。
2.提高生產力:容器通過消除跨服務的依賴性和沖突來提高開發人員的生產力。每個容器都可以看作是壹個不同的微服務,所以可以獨立升級,不用擔心同步問題。
3.版本控制:每個容器映像都有版本控制,這樣就可以跟蹤容器的不同版本,並監控版本之間的差異。
4.運行環境是可移植的:容器封裝了運行應用程序所需的所有相關細節,比如應用程序依賴關系和操作系統。這使得將圖像從壹個環境移植到另壹個環境更加靈活。例如,同壹映像可以在Windows或Linux中運行,也可以在開發、測試或登臺環境中運行。
5.標準化:大多數容器都基於開放標準,可以在所有主流的Linux發行版、微軟平臺等上運行。
6.安全性:容器之間的流程是相互隔離的,基礎設施也是如此。這樣,壹個容器的升級或更改不會影響其他容器。
1.復雜性增加:隨著容器和應用程序數量的增加,復雜性也隨之增加。在生產環境中管理如此多的容器是壹項具有挑戰性的任務。Kubernetes?然後呢。梅索斯?管理等工具都有壹定數量的容器。
2.原生Linux支持:大多數容器技術,比如?基於Linux容器(LXC)的Docker,在微軟環境下運行容器比在原生Linux下運行容器略顯笨拙,日常使用也會帶來復雜性。
3.不成熟:容器技術在市場上相對較新,需要時間來適應市場。開發者之間的可用資源是有限的。如果開發人員遇到問題,可能需要壹些時間來解決。
操作系統容器:如維基百科所述,“操作系統層虛擬化是壹種計算機虛擬化技術,將操作系統內核虛擬化,允許多個獨立的用戶空間存在,而不是只有壹個。這些實例有時被稱為容器、虛擬引擎、虛擬專用服務器或監獄(FreeBSD監獄或chroot監獄)。從運行在容器中的程序的角度來看,這些實例就像真正的計算機壹樣。”
如上所述,容器* * *喜歡托管主機的內核,但是提供用戶空間隔離。我們可以在容器中安裝、配置和運行應用程序,就像在主機操作系統上壹樣。同樣,分配給容器的資源只有它們自己看得見。就好比,任何壹個虛擬機都無法獲得其他虛擬機的資源。
當需要配置大量具有相同配置的操作系統時,操作系統容器非常有用。因此,容器有助於創建模板,並可用於創建與另壹個操作系統風格相似的容器。
為了創建操作系統容器,我們可以使用容器技術,如LXC、OpenVZ、Linux VServer、BSD Jails和Solaris zones。
應用程序容器:正如維基百科所說,“應用程序虛擬化是壹種軟件技術,它從計算機執行的底層操作系統中封裝計算機程序。壹個完全虛擬化的應用程序,雖然仍然像以前壹樣執行,但不會按照傳統的方式安裝。應用程序在運行時的行為就像它直接與原始操作系統和操作系統管理的所有資源進行交互壹樣,但它可以實現不同程度的隔離或沙箱。”
在這種情況下,術語“虛擬化”指的是封裝的工件(應用程序),這與它在硬件虛擬化中的含義截然不同,在硬件虛擬化中,它與抽象的工件(物理硬件)相關。
應用程序容器旨在將服務打包並作為單個進程運行,而在操作系統容器中,可以運行多個服務和進程。
Docker和Rocket等容器技術就是應用程序容器的例子。