Unikernel v.s Container

Unikernel v.s Container

Type-1 Bare-Metal Environment

Container虛擬化架構

Container其實可以看作是linux內的一個process,透過你在yaml內描述需要安裝的應用程式後將這些應用程式相關聯到的系統lib和bin都打包起來,透過呼叫linux kernel的cgroup、namespace… 隔離出一個完全獨立的運算環境來執行,概念上很像每個登入的使用者只能進去自己的home目錄環境,只是環境被獨立的更完整,包括process, network, IPC, file system, hostname。因此,在Windows和MAC host環境下,container因為呼叫不到linux kernel,所以需要安裝linux virtual machine,讓container運作在內部。

Unikernel虛擬化架構

一個完整的kernel,其實有很多地方是應用程式用不到的,例如不需要的device drivers和不屬於現在kernel的其他檔案系統,如果能去除掉這些不需要加載的模塊,對VM的啟動是能加快非常多的。unikernel就是以這樣的概念,透過libOS將必要的kernel元件compile進應用程式成為一個binary來執行。

Unikernel能取代Container?

Container啟動速度會比unikernel快,但是並不像unikernel一樣,kernel與應用程式包在同一個位址空間所以程式執行效率較高。此外,container的安全性(kernel的共享和Namespace的不完善),也一直是大家詬病的問題。Unikernel則是在編譯流程上的耗時複雜以及不能debug讓大家卻步。目前unikernel對Container而言是一個互補的關係,能幫助container跨平台到MAC/Windows上又能保持原本的優勢,從功能和效率來看,它也的確有潛力能取代container,也因此Docker收購了Unikernel Systems公司,後來公布了Docker engine for Mac/Windows,2017 docker conference也發佈了 linuxkit, 開始在linux 上提供unikernel環境。

撰文: 顏志翰 迎棧科技資深架構師

訂閱電子報

Select list(s)*

 

Loading