1. 程式人生 > >暢談Docker底層技術-LXC與Cgroup

暢談Docker底層技術-LXC與Cgroup

虛擬化 docker容器

#Docker LXC及Cgroup

docker最為為LXC+AUFS組合,其中LXC負責資源管理,AUFS負責鏡像管理;而LXC包括cgroup,namespace,chroot等組件

並通過cgroup資源管理

那麽,從資源管理的角度來看,Docker,Lxc,Cgroup三者的關系是怎樣的呢?

cgroup是在底層落實資源管理,LXC在cgroup上面封裝了一層,隨後,docker有在LXC封裝了一層;

技術分享圖片

Cgroup其實就是linux提供的一種限制,記錄,隔離進程組所使用的物理資源管理機制;也就是說,Cgroup是LXC為實現虛擬化所使用資源管理手段,我們可以這樣說,底層沒有cgroup支持,也就沒有lxc,更別說docker的存在了,這是我們需要掌握和理解的,三者之間的關系概念

我們在把重心轉移到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工具;

暢談Docker底層技術-LXC與Cgroup