容器和虛擬機有什麼區別?
我想了解容器與虛擬機的所有不同之處。對於這兩種虛擬化方法,都可以觀察到具有所有作業系統的文件系統。但是在 Docker 容器中,例如 centos 5.x,如果我
uname -a
在容器的 shell 中執行,輸出會顯示我的主機核心版本。它是如何工作的以及與經典虛擬機(vmware、virtualbox、xen 等)的主要區別?
這兩種形式都允許多個作業系統在單個物理機器上執行。
使用容器,這些作業系統是隔離的(它們有自己的文件系統、程序、庫,包括
libc
、IP 地址等),但它們仍然共享相同的核心。這就是為什麼uname -a
顯示您的主機核心版本的原因。在傳統的虛擬化中,每個作業系統都有自己的核心在執行。這些多個核心不是執行在真實硬體之上,而是執行在由稱為管理程序的軟體提供的虛擬化硬體之上。與基於容器的虛擬化相比,這是一個額外的層。
每種虛擬化都有其優點和缺點。容器在作業系統的選擇上受到更多限制,容器必須得到執行核心的支持(例如:Solaris 上的 Solaris zone,Linux 上的 LXC,AIX 上的 WPAR),儘管從技術上講,沒有什麼禁止核心開發人員實現對“外星人”使用者區(例如:lxbrand = Solaris 10和SmartOS上的 Linux 區域,或者最近是 Windows 10 上的 Ubuntu 執行時),而使用管理程序時,作業系統只需要由虛擬硬體支持,這允許許多異構配置(例如: Linux 32 位和 64 位核心、*BSD、Solaris、Windows、Mac OS X,…)
容器的主要優點是它們更輕,應用程序性能與真正的裸機作業系統安裝基本相同。新容器實例化速度要快得多,因為沒有額外的核心要啟動,虛擬環境密度可以高得多,因為沒有額外的核心要執行。
請注意,Docker 不是容器實現。Docker 是在容器中執行的應用程序的建構/打包/分發標準,包括執行它們的引擎,最近還添加了一個協調器。該引擎的作用類似於管理程序,但用於容器上的應用程序。