[轉錄]Docker vs KVM虛擬化技術

來源:http://www.itread01.com/articles/1491287895.html

虛擬化技術虛擬化技術
    雲端計算是近幾年的重頭戲,雲計算包括PaaSSaaSIaaS三大領域,目前國內比較強大的是PaaS和IaaS領域,SaaS最近在某些ERP公司也很火熱,相信不久的將來,雲端ERP會成為主要增長點。
    虛擬化技術在雲計算的發展起著重要的作用,世界範圍內,領先的虛擬化產品包括Vmware 系列,Redhat,微軟,Oracle等,其中以VMware vsphere 是vmware公司的旗艦產品最為著名,使用簡單方便操作備受好評,但是價格昂貴,支撐雲計算平臺(主要支撐PaaS,IaaS)顯然成本高昂。不過,VMWare Vsphere中的VMware Esxi(vmware hypervisor)是免費的,部署私有雲是一個不錯的選擇。

    雖然ESXi免費,但是其他功能組件收費,使用以上軟件發展虛擬化,高昂的成本必然影響雲計算的發展。既然如此,那還要什麽可以替代的技術麽?在Linux世界有兩種免費技術可以用來實現虛擬化:DockerKVM,當然,你可能聽的最多的是Docker與OpenStack技術,實際上OpenStack用來管理KVM

    Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口,Docker基於LXC(Linux Container)技術,Linux Container容器是一種Linux內核虛擬化技術,可以提供輕量級的虛擬化,以便隔離進程和資源,免費開源。

     KVM是開源軟件,全稱是kernel-based virtual machine(基於內核的虛擬機)。 是x86架構且硬件支持虛擬化技術(如 intel VT 或 AMD-V)的linux全虛擬化解決方案。 它包含一個為處理器提供底層虛擬化可加載的核心模塊kvm.ko(kvm-intel.ko 或 kvm-AMD.ko)。 kvm還需要一個經過修改的QEMU軟件(qemu-kvm),作為虛擬機上層控制和界面。kvm能在不改變Linux或Windows鏡像的情況下同時運行多個虛擬機,(ps:它的意思是多個虛擬機使用同一鏡像)並為每一個虛擬機配置個性化硬件環境(網卡、磁盤、圖形適配器……)。 在主流的Linux內核,如2.6.20以上的內核均包含了KVM核心。

Docker與KVM對比

KVM虛擬化結構

Docker虛擬化結構

 

作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢。

1.Docker 容器的啟動可以在秒級實現,這相比傳統的虛擬機方式要快得多。 其次,Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器。

2.容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷盡量小。傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可。

3.虛擬化技術依賴物理CPU和內存,是硬件級別的;而docker構建在操作系統上,利用操作系統的containerization技術,所以docker甚至可以在虛擬機上運行。

4.虛擬化系統一般都是指操作系統鏡像,比較復雜,稱為“系統”;而docker開源而且輕量,稱為“容器”,單個容器適合部署少量應用,比如部署一個redis、一個memcached。

5.傳統的虛擬化技術使用快照來保存狀態;而docker在保存狀態上不僅更為輕便和低成本,而且引入了類似源代碼管理機制,將容器的快照歷史版本一一記錄,切換成本很低。

6.傳統的虛擬化技術在構建系統的時候較為復雜,需要大量的人力;而docker可以通過Dockfile來構建整個容器,重啟和構建速度很快。更重要的是Dockfile可以手動編寫,這樣應用程序開發人員可以通過發布Dockfile來指導系統環境和依賴,這樣對於持續交付十分有利。

7.當然KVM對比於容器也有一個比較大的優勢就是可以使用不同的操作系統或內核。所以,舉例說,你可以使用微軟Azure,同時運行Windows Server2012 的實例和SUSE Linux企業級服務器的實例。至於Docker,所有容器都必須使用同樣的操作系統和內核。

 

Docker的優勢

具體說來,Docker 在如下幾個方面具有較大的優勢。

1 更快速的交付和部署

對開發和運維(devop)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。

開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創建容器,快速叠代應用程序,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程序是如何創建和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測試、部署的時間。

2 更高效的虛擬化

Docker 容器的運行不需要額外的 hypervisor 支持,它是內核級的虛擬化,因此可以實現更高的性能和效率。

3 更輕松的遷移和擴展

Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有雲、私有雲、個人電腦、服務器等。這種兼容性可以讓用戶把一個應用程序從一個平臺直接遷移到另外一個。

4 更簡單的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。

5 對比傳統虛擬機(KVM)總結

Docker在實際應用中的一些問題和局限性

1.LXC是基於cgroup等linux kernel功能的,因此container的guest系統只能是linux base的
2.隔離性相比KVM之類的虛擬化方案還是有些欠缺,所有container公用一部分的運行庫
3.網絡管理相對簡單,主要是基於namespace隔離
4.cgroup的cpu和cpuset提供的cpu功能相比KVM的等虛擬化方案相比難以度量(所以dotcloud主要是安內存收費)
5.container隨著用戶進程的停止而銷毀,container中的log等用戶數據不便收集

另外,Docker是面向應用的,其終極目標是構建PAAS平臺,而現有虛擬機主要目的是提供一個靈活的計算資源池,是面向架構的,其終極目標是構建一個IAAS平臺,所以它不能替代傳統虛擬化解決方案。目前在容器可管理性方面,對於方便運維,提供UI來管理監控各個containers的功能還不足,還都是第三方實現。因為容器技術本身更適於解決大規模應用場景,所以通常都是集群基礎上的部署、運維,但是目前對這一系列任務的自動化處理尚無統一的或者標準的框架。如果要讓Docker真正在實際環境中發揮最大的效能並且易於維護,就需要有成熟穩定的資源編排(orchestration)、資源調度(scheduling)和部署(deployment)的支持,但是這方面暫時還沒有很明顯的最佳解決方案,所以大多數人都在摸索和搭建自己的解決方案。

 

本篇發表於 電腦資訊。將永久鏈結加入書籤。