在基礎技術創業這個圈子里,Docker算是最火的獨角獸了。不久前Docker剛剛完成了9500萬美元的新一輪投資。要知道Docker是個純開源,完全底層Building Block的技術,而且到目前為止Docker還沒有真正的商業產品。
那么, 究竟什么讓Docker這么火呢?
大家都知道:
Docker = LXC + AUFS
從一方面看,Docker從誕生至今都定位于Container之上,那么Docker的核心是Container么?而從另一方面,Docker在標準的LXC之上又融合AUFS這樣的分層鏡像管理機制,那么AUFS是Docker的核心?
話還是從我們的DVM項目說起吧。DVM是一個混合了Hypervisor(虛擬化)和Docker的開源項目。你可以使用DVM在物理機上啟動任何Docker鏡像。不同之處是,DVM沒有使用LXC,而是使用了Hypervisor (KVM, Xen, ESX),創建了一個VM來運行Docker鏡像。
乍聽起來,DVM有點像基于VM運行的CoreOS或者RancherOS。但實際上,DVM的虛機內部不是一個完整操作系統(CoreOS雖然精簡,但仍然是個完整的OS)。DVM的虛機內部只有一個Linux Kernel。而這個kernel會從物理機的硬盤上加載并運行Docker鏡像。更重要的是:DVM創建VM的時候,由于這個kernel能在毫秒級完成啟動,所以使用DVM啟動Docker鏡像的耗時跟LXC相差無幾。
而從運行性能看,虛擬化的性能雖然有一定損失,但差距并不是太大:
CPU性能相比物理機只有0.5-2%的損失
內存消耗比LXC多10MB
磁盤和網絡性能,在云環境下由于SDN和分布式存儲的原因,DVM也和LXC非常接近
既然DVM可以使用虛擬機直接啟動Docker鏡像,而且性能接近Container,那么Container就不是Docker運行的唯一選擇,因此也就不是Docker的核心。
再來看AUFS,第一次看到Docker的時候,大家都被它類似于Git的鏡像管理流程吸引。不過仔細想想,這個功能更多的被用來實現增量部署更新。而從"集裝箱化"這個角度,AUFS并沒有直接的關系。作為例子,CoreOS的Rocket并未采用類似的分層文件系統技術。另一方面,傳統虛擬機鏡像也能結合AUFS達到類似的效果。那么為什么虛擬化廠商之前沒有想到類似Docker的idea呢?
原因很簡單,Docker的真正核心在于:
它拋棄傳統VM試圖模擬完整機器的思路,而是以應用為單元進行"集裝封箱"
這樣做的好處主要有兩個:
加快啟動速度:我們知道,為了兼容性,通用性的考慮,虛擬化廠商無法對OS進行優化。傳統VM啟動之所以慢,很大程度是因為OS啟動耗時。反觀Docker,由于只考慮應用本身,當Docker鏡像啟動時就可以做到心無雜念,自然也就快。
精簡鏡像:從技術角度來說,AUFS也可以應用在VM的鏡像(qcow2)。但由于VM面向的是完整的OS,其中包含了各種服務,導致VM鏡像一般體積較大(GB),不方便交付和部署。而Docker不關心完整的OS,只包含應用運行所需的最小集合,因此鏡像體積只有200-300MB,大大縮短了鏡像的下載時間。
說到這里,你可以看到"面向應用"是Docker最核心的理念。那自然而然的問題是:
既然Docker已經證明我們不需要完整的OS,那我們是否還需要一個完整的Kernel?
在DVM項目里,我們開發了一個HyperKernel, 它非常精簡,資源占用極低,不過它仍然是個通用的Linux內核,仍然存在大量的簡化,重構的空間。我們可不可以大膽想象,HyperKernel在未來會不會進化為一個專用的,極簡的內核?
于是,我們成立了一家startup,而在5.1之后DVM也即將開源。我們希望能推動Kernel,Hypervisor,Docker技術的發展,并打造新一代Kernel Distro,也很期待有一樣理想的“內核er”們的加入!
作者簡介
王旭:DVM創始人,CTO,前VisualOps CTO,多年的Debian,Kernel,分布式存儲老兵