虛擬機是云計算的核心技術之一,也是目前云主機的主要實現(xiàn)方式。除了虛擬機,容器也在云計算中應用得越來越多。那么容器與虛擬機到底有什么區(qū)別?
目前容器技術的代表就是Docker,很多人認為容器將取代虛擬機,成為云計算的主流技術。說到Docker,就要從Docker的底層技術LXC(Linux Container)說起。
與VMWare為代表的虛擬機技術不同,LXC是在操作系統(tǒng)層面為進程提供虛擬的運行環(huán)境,而不是通過硬件抽象層來對硬件進行虛擬化。VMWare虛擬機是面向操作系統(tǒng)的,而LXC是面向進程的。
LXC提供的虛擬運行環(huán)境就是容器,操作系統(tǒng)可以為容器分配資源,包括特定比例的cpu時間、IO時間,內(nèi)存,外設訪問控制,并提供獨立的命名空間(namespace)。
LXC的實現(xiàn)是靠Linux內(nèi)核在資源管理和隔離控制方面的相關特性。
LXC在資源管理方面依賴于Linux內(nèi)核的控制組(cgroups)子系統(tǒng),cgroups子系統(tǒng)是Linux內(nèi)核提供的一個基于進程組的資源管理的框架,可以為特定的進程組限定可以使用的資源。
LXC在隔離控制方面依賴于Linux內(nèi)核的namespace特性,命名空間可以讓進程與進程之間,用戶與用戶之間彼此看不到對方。
Docker 是 PaaS 提供商 dotCloud ,也就是后來的Docker公司,開源的一個基于 LXC 的高級容器引擎,源代碼托管在 Github 上, 基于go語言并遵從Apache2.0協(xié)議開源。
Docker 是一個開源的應用容器引擎,讓開發(fā)者可以打包應用到一個可移植的容器中,然后發(fā)布到Linux 機器上。容器是完全使用沙箱機制,相互之間不會有任何接口。
Docker基于Linux的LXC技術,可以認為是LXC的上層封裝。當然除了容器以外,Docker還包括了鏡像管理的功能。從資源管理角度來說,Docker基于LXC,LXC基于cgroup。
Docker與LXC的關系
虛擬機與容器的對比
以VMWare公司產(chǎn)品、KVM等為代表的虛擬機技術,是通過對硬件的抽象來實現(xiàn)的。關于硬件抽象的原理,可以參考前文《云計算IaaS的核心技術:虛擬化技術》。
以Docker為代表的容器技術,是操作系統(tǒng)層面的虛擬化技術。與HAL(硬件抽象層)層面的虛擬化技術相比,有以下區(qū)別:
虛擬化開銷。由于利用了Linux內(nèi)核提供的LXC特性,所以容器的虛擬化開銷更小。傳統(tǒng)虛擬機要先創(chuàng)建虛擬機,然后安裝操作系統(tǒng),最后部署應用。
鏡像文件。由于容器鏡像不需要包括Guest OS,只需要包括應用及其依賴包,因此鏡像文件更小。
部署。傳統(tǒng)的虛擬化技術則需要先創(chuàng)建虛擬機,然后安裝系統(tǒng),再部署應用。容器利用LXC相關命令,可直接創(chuàng)建并啟動應用的運行環(huán)境。
跨平臺。由于底層基于LXC,所以Docker必須基于Linux系統(tǒng)搭建。虛擬機管理程序Hypervisor可以運行在不同的操作系統(tǒng)上,甚至直接運行在裸機上。