OpenVZ VS Docker,不火只是時機的錯嗎?

jopen 9年前發布 | 15K 次閱讀 Docker

OpenVZ和Docker都是輕量級的虛擬化技術,OpenVZ早在2005年就已經誕生,并且采用自行修改的Linux內核,安全性高于LXC和Docker,也已經成功地應用在生產環境中。 我對OpenVZ工程師充滿尊敬,他們貢獻的范圍不僅包括OpenVZ,還包括主流Linux內核:PID namespace和net namespace,以及一些cgroups controller。 更不必提他們直接對LXC和Docker的貢獻。但為什么OpenVZ技術高超如斯,卻一直不溫不火?而作為后繼者的Docker,僅僅1年的時間就已經火到一塌糊涂?

我的看法是這樣的:

OpenVZ和Docker的不同境遇,不是技術的原因,也不是宣傳的原因,歸根結底是由于二者的適用情景不同。

OpenVZ容器是一個輕量虛擬機,一個完整的操作系統環境,它的主要用途是充當虛擬私有服務器。而Docker的哲學是“每個容器運行一個應用進程”。 不自行定制的話,Docker容器內不會帶init等服務,它的主要用途是應用的運維,包括打包、轉移、部署和運行等環節。LXC的本質是一個支持主流內 核而非定制內核的OpenVZ,它與OpenVZ有很多共同的開發者。LXC容器也更接近于輕量虛擬機。

OpenVZ解決的是云基礎設施提供者管理虛擬機的問題,主要應用在多租戶的公有云環境;而Docker解決的是應用運維的問題,至少在現階 段,主要應用在本單位的私有計算設施上。為什么Docker安全性還沒有足夠保證,已經有這么多單位采用?因為以前這些應用直接部署在本單位購買的物理服 務器或者虛擬機上,現在則是用Docker打包在容器內,這樣既提高了運維的效率,安全性也不會比之前的工作方式低。

顯然,需要應用運維的用戶遠遠多于云基礎設施提供者,所以,OpenVZ和Docker就有了不同的發展境遇。

從公司和生態的角度來說:

OpenVZ背后的公司是Parallels,主打的商業產品是Parallels Cloud Server(PCS)。根據官方網站,已經有10,000多家云服務提供商采用了Parallels的解決方案。在公有云平臺這種多租戶的環境中,安全 是重中之重。因此,PCS采用的是修改過的RHEL6內核(`2.6.32`),對RHEL7內核的修改估計2015年會完成。OpenVZ和PCS共享 相同的內核,但是用戶態工具大不相同。舉個例子,OpenVZ只提供命令行工具`vzctl`,而PCS則提供了完整的API。如果像我之前那樣,需要在 程序中集成OpenVZ,就只能封裝命令行的`vzctl`。且不說研究`vzctl`的各種參數、解析標準輸出這些瑣碎工作,更要命的是有些 `vzctl`操作是獨占的,此時不允許多個`vzctl`進程并發執行。沒有API,導致一個嚴重的后果:形不成一個以OpenVZ為中心的生態系統。 也許這是Parallels有意為之。如果OpenVZ提供完善的API,總會有人去開發相應的實用工具和服務,最終與PCS形成事實上的競爭關系。

由于著眼點是輕量虛擬機,OpenVZ提供的模板(即鏡像)都是操作系統,主要包括CentOS/Debian/Fedora/Ubuntu等 幾種,這就沒必要專門設一個類似于Docker Hub那樣的鏡像中心。OpenVZ的鏡像文件會映射到ploop設備上。有人問:把容器的文件直接寫在常規文件系統,然后`chroot`不就完了呢? 使用[ploop的好處](https://openvz.org/Ploop/Why)包括:不同的容器可以有不同的文件系統設置,且互不相影響性能; 支持快速建立快照;有文件系統寫入操作的跟蹤器,有利于實現文件系統數據的實時遷移。OpenVZ還開啟實時遷移工具項目[CRIU] (http://criu.org/Main_Page),它充分地利用了ploop的特性和OpenVZ內核提供的kernel memory controller,后者意味著我們可以把一個虛擬機的內存狀態也遷移到別處。

你看,OpenVZ開發者完全是從虛擬機的視角研發技術和產品。不知道是否受到Docker發展態勢的影響,在2014年底的[OpenVZ past and future](http://openvz.livejournal.com/49158.html)一文中,Parallels決定把OpenVZ和 PCS合并為一個統一的開源代碼庫,OpenVZ用戶也能夠像PCS用戶那樣使用更穩定、更多的功能特性。第一步是在2015年開放基于RHEL7修改的 內核,重點是增加kernel memory controller支持,隨后是ploop。是的,輕量虛擬機是OpenVZ永恒的視角,它一直狂奔在輕量虛擬機的道路上。

值得注意的是在2014年底,Parallels也宣布了自家PCS對Docker的支持(http://sp.parallels.com /news/pr/release/article/parallels-announces-support-for-docker- applications-on-parallels-containers/)。

反觀Docker,它本來是dotCloud公司(當然,現在改名叫Docker公司了)的一個內部項目。dotCloud提供的服務是云計算 應用引擎(Platfor as a Service,PaaS),云應用的運維才是dotCloud目標用戶(即開發者和運維人員)的痛點。Docker鏡像描述了應用程序的依 賴,Docker用容器技術實現不同應用的隔離(這避免了不同應用的依賴之間相互影響)和轉移。用戶的應用千差萬別,不可能像操作系統鏡像那樣只有有限幾 種,這就需要一個Docker Hub供大家分享各種應用程序鏡像。Docker還應用Copy-on-Write技術和分層文件系統,有效地解決了Docker鏡像和容器的大小問題。 Docker完全開源,一開始就提供API,于是圍繞Docker的工具和服務層出不窮,一個生態系統出現了。

OpenVZ和Docker的發展水平不同,是因為它們具有不同的vision,所以它們才會采取不同的鏡像方案。也就是說,采用不同的鏡像方案是“果”,而不是“因”。

從長遠看,Docker有更好的發展前景。無論用戶的基礎設施是物理服務器、KVM/XEN虛擬機還是OpenVZ容器,最終目標還是要部署實現商業價值的應用。Docker提供的是每一個軟件與互聯網企業都需要的工具和服務,而OpenVZ容器只是諸多選擇之一。

最后,說句題外話,一個常見的問題是堅持每個Docker容器只運行一個應用進程,還是當作一個輕量虛擬機?如果我的分析成立,應該堅持前者。如果要把容器當作一個輕量虛擬機,LXC/LXD更適合。

還有幾個值得思考的問題。如果我們是Docker的開發者,如何實現Docker的商業價值?目前Docker存在什么問題,需要采取哪些改進措施?

歡迎回復您的想法與我們討論。


來自:http://mp.weixin.qq.com/s?__biz=MjM5ODM3MzkyNQ==&mid=208427896&idx=1&sn=60f79555735039bd870f7b4b086cba7e&3rd=MzA3MDU4NTYzMw==&scene=6#rd

</div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!