docker和kvm都是虛擬化技術,docker屬於秒級啓動的輕量高性能的虛擬化,它們的主要差異:linux
一:docker與VM區別docker
VM(VMware)在宿主機器、宿主機器操做系統的基礎上建立虛擬層、虛擬化的操做系統、虛擬化的倉庫,而後再安裝應用;
Container(Docker容器),在宿主機器、宿主機器操做系統上建立Docker引擎,在引擎的基礎上再安裝應用。那麼問題來了,沒有操做系統,怎麼運行程序?能夠在Docker中建立一個ubuntu的鏡像文件,這樣就能將ubuntu系統集成到Docker中,運行的應用就都是ubuntu的應用。
二:dockers=LXC+AUFSubuntu
docker最爲爲LXC+AUFS組合,其中LXC負責資源管理,AUFS負責鏡像管理;而LXC包括cgroup,namespace,chroot等組件app
並經過cgroup資源管理,那麼,從資源管理的角度來看,Docker,Lxc,Cgroup三者的關係是怎樣的呢?工具
cgroup是在底層落實資源管理,LXC在cgroup上面封裝了一層,隨後,docker有在LXC封裝了一層;性能
Cgroup其實就是linux提供的一種限制,記錄,隔離進程組所使用的物理資源管理機制;也就是說,Cgroup是LXC爲實現虛擬化所使用資源管理手段,咱們能夠這樣說,底層沒有cgroup支持,也就沒有lxc,更別說docker的存在了,這是咱們須要掌握和理解的,三者之間的關係概念spa
咱們在把重心轉移到LXC這個至關於中間件上,上述咱們提到LXC是創建在cgroup基礎上的,咱們能夠粗略的認爲LXC=Cgroup+namespace+Chroot+veth+用戶控制腳本;LXC利用內核的新特性(cgroup)來提供用戶空間的對象,用來保證資源的隔離和對應用系統資源的限制;操作系統
Docker容器的文件系統最先是創建在Aufs基礎上的,Aufs是一種Union FS,簡單來講就是支持將不一樣的目錄掛載到同一個虛擬文件系統之下中間件
並實現一種laver的概念,對象
因爲Aufs未能加入到linux內核中,考慮到兼容性的問題,便加入了Devicemapper的支持,Docker目前默認是創建在Devicemapper基礎上,
devicemapper用戶控件相關部分主要負責配置具體的策略和控制邏輯,好比邏輯設備和哪些物理設備創建映射,怎麼創建這些映射關係等,而具體過濾和重定向IO請求的工做有內核中相關代碼完成,所以整個device mapper機制由兩部分組成--內核空間的device mapper驅動,用戶控件的device mapper庫以及它提供的dmsetup工具;