mysql Windows 云计算 php apache shell 开源 微软 Android 编程 java linux wordpress Ubuntu Firefox centos 程序员 nginx Python google

Linux容器演變歷程與未來發展前景

Linux容器作為一類操作系統層面的虛擬化技術成果,旨在立足於單一Linux主機交付多套隔離性Linux環境。與虛擬機不同,容器系統並不需要運行特定的訪客操作系統。相反,容器共享同一套主機操作系統內核,同時利用訪客操作系統的系統庫以交付必要的系統功能。由於無需借助於專門的操作系統,因此容器在啟動速度上要遠遠優於虛擬機。

Linux容器演变历程与未来发展前景

圖片來源:Docker有限公司

容器能夠利用Namespaces、Apparmor、SELinux配置、chroot以及CGroups等Linux內核功能,從而交付一套類似於虛擬機的隔離性環境。Linux安全模塊能夠確保來自容器的主機設備與內核訪問行為受到妥善管理,從而避免入侵活動的發生。除此之外,容器還能夠通過其主機操作系統運行多種不同Linux發行版——只要各類操作系統擁有同樣的底層CPU架構要求。

總體而言,容器技術提供了一種立足於各類Linux發行版的容器鏡像創建方式,同時利用API進行容器生命周期管理,通過客戶端工具實現與該API的交互,進而提供快照以及不同容器主機之間容器實例遷移等能力。

容器技術發展歷程

以下為從維基百科以及其它信息源處收集到的容器發展歷程總結:

1979年 — chroot

容器技術的概念可以追溯到1979年的UNIX chroot。這是一套“UNIX操作系統”系統,旨在將其root目錄及其它子目錄變更至文件系統內的新位置,且只接受特定進程的訪問。這項功能的設計目的在於為每個進程提供一套隔離化磁盤空間。1982年其被添加至BSD當中。

2000年 — FreeBSD Jails

FreeBSD Jails是由Derrick T. Woolworth於2000年在FreeBSD研發協會中構建而成的早期容器技術之一。這是一套“操作系統”系統,與chroot的定位類似,不過其中包含有其它進程沙箱機制以對文件系統、用戶及網絡等資源進行隔離。通過這種方式,它能夠為每個Jail、定制化軟件安裝包乃至配置方案等提供一個對應的ip地址。

2001年 — Linux VServer

Linux VServer屬於另一種jail機制,其能夠被用於保護計算機系統之上各分區資源的安全(包括文件系統、CPU時間、網絡地址以及內存等)。每個分區被稱為一套安全背景(security context),而其中的虛擬化系統則被稱為一套虛擬私有服務器。

2004年 — Solaris容器

Solaris容器誕生之時面向x86與SPARC系統架構,其最初亮相於2004年2月的Solaris 10 Build 51 beta當中,隨後於2005年正式登陸Solaris 10的完整版本。Solaris容器相當於將系統資源控制與由分區提供的邊界加以結合。各分區立足於單一操作系統實例之內以完全隔離的虛擬服務器形式運行。

2005年 — OpenVZ

OpenVZ與Solaris容器非常相似,且使用安裝有補丁的Linux內核以實現虛擬化、隔離能力、資源管理以及檢查點交付。每套OpenVZ容器擁有一套隔離化文件系統、用戶與用戶群組、一套進程樹、網絡、設備以及IPC對象。

2006年 — Process容器

Process容器於2006年由谷歌公司推出,旨在對一整套進程集合中的資源使用量(包括CPU、內存、磁盤I/O以及網絡等等)加以限制、分配與隔離。此後其被更名為Control groups(即控制組),從而避免其中的“容器”字眼與Linux內核2.6.24中的另一術語出現沖突。這表明了谷歌公司率先重視容器技術的敏銳眼光以及為其做出的突出貢獻。

2007年 — Control Groups

正如上文所提及,Control Groups也就是谷歌實現的cgroups,其於2007年被添加至Linux內核當中。

2008年 — LXC

LXC指代的是Linux Containers,其也是第一套完整的Linux容器管理實現方案。其功能通過cgroups以及Linux namespaces實現。LXC通過liblxc庫進行交付,並提供可與Python3、Python2、Lua、Go、Ruby以及Haskell等語言相對接的API。相較於其它容器技術,LXC能夠在無需任何額外補丁的前提下運行在原版Linux內核之上。目前LXC項目由Canonical有限公司負責贊助及托管。

2011年 — Warden

Warden由CloudFoundry公司於2011年所建立,其利用LXC作為初始階段,隨後又將其替換為自家實現方案。與LXC不同,Warden並不會與Linux緊密耦合。相反,其能夠運行在任意能夠提供多種隔離環境方式的操作系統之上。Warden以後臺進程方式運行並提供API以實現容器管理。感興趣的朋友可以點擊此處與此處了解更多與Warden相關的細節信息(英文原文)。

2013年 — LMCTFY

Lmctfy代表的是“Let Me Contain That For You(幫你實現容器化)”。它其實屬於谷歌容器技術堆棧的開源版本,負責提供Linux應用程序容器。谷歌公司在該項目的起步階段宣稱其能夠提供值得信賴的性能表現、高資源利用率、共享資源機制、充裕的發展空間以及趨近於零的額外資源消耗。Kubernetes目前所使用的cAdvisor工具最初就來源於lmctfy項目。2013年10月lmctfy的首個版本正式推出,谷歌公司在2015年決定將lmctfy的核心概念與抽象機制轉化為libcontainer。在失去了主幹之後,如今lmctfy已經失去一切積極的發展勢頭。

Libcontainer項目最初由Docker公司建立,如今已經被歸入開放容器基金會的管轄範疇。

2013年 — Docker

截至2016年1月,Docker是目前最具人氣且應用最為廣泛的容器管理系統。Docker項目最初是由一家名為dotCloud的平臺即服務廠商所打造,其後該公司更名為Docker。與Warden類似,Docker同樣在起步階段使用LXC,而後利用自己的libcontainer庫將其替換下來。與其它容器平臺不同,Docker引入了一整套與容器管理相關的生態系統。其中包括一套高效的分層式容器鏡像模型、一套全局及本地容器註冊表、一個精簡化REST API以及一套命令行界面等等。在後期發展階段,Docker公司還構建起一套名為Docker Swarm的容器集群管理解決方案。

2014年 — Rocket

Rocket最初由CoreOS開發而成,專門用於解決部分Docker當中存在的缺陷。CoreOS方面也提到,他們當初的開發目標是在安全性與生產要求滿足能力上超越Docker。更重要的是,其基於App Container規範並使其成為一項更為開放的標準。除了Rocket之外,CoreOS還開發出了多種其它與容器相關的產品,且已經被Docker與Kubernetes所使用:CoreOS操作系統、etcd以及flannel。

2016年 — Windows容器

微軟公司也已經於2015年采取初步舉措,希望將容器支持能力添加到微軟Windows Server操作系統當中,而這項旨在幫助Windows應用實現容器化的項目被稱為Windows容器(Windows Containers)。其即將隨微軟的Windows Server 2016一同推出。在這碩方案當中,Docker能夠以原生方式在Windows平臺上運行容器,而無需運行虛擬機或者多層Docker(早期Docker需要利用Linux虛擬機才能與Windows系統相對接)。

容器之發展願景

截至目前(2016年1月),整個技術行業已經越來越多地將軟件應用程序部署基礎由虛擬機轉移向容器。之所以出現這種趨勢,一大重要原因在於容器能夠提供遠優於虛擬機的靈活性與使用成本。谷歌公司多年來一直在利用Borg and Omega容器集群管理平臺等容器技術以實現各類谷歌應用的規模化運行。更重要的是,谷歌公司還通過實現cgroups以及參與libcontainer項目等方式為容器技術的發展做出了突出貢獻。谷歌方面在過去幾年當中已經利用容器技術實現了可觀的性能提升、資源利用率改善以及整體執行效率優化。就在最近,微軟公司這位從未將任何操作系統層級虛擬化機制引入Windows平臺的軟件巨頭亦快速在Windows Server上實現了原生容器支持能力。

Docker、Rocket以及其它容器平臺都無法運行在生產環境中的單一主機之上,這是因為它們都存在著單點故障隱患。盡管一整套容器集合能夠運行在單一主機上,然而一旦該主機發生故障,所有運行於其上的容器也將全面癱瘓。谷歌公司在這方面搶先一步,憑借從Borg項目中積累到的經驗打造出名為Kubernetes的開源容器集群管理系統。Docker公司也針對這一難題開發出了Docker Swarm解決方案。目前,這些解決方案尚處於早期發展階段,而且可能還需要數月甚至一年才能真正具備完整的功能集,從而以穩定及廣泛的方式被引入容器行業的生產環境當中。

微服務則是另一項突破性技術成果,而不僅僅是一套利用容器機制實現自身部署的軟件架構。雖然微服務的概念算不上什麽新鮮事物,但這種Web服務的輕量化實現機制確實能夠提供遠超過標準Web服務的啟動速度。之所以能夠實現這項目標,是因為其將一整套功能單元以打包方式(可能包括單一服務/API方法)整合在一項服務當中,再將服務嵌入一套輕量化Web服務器二進制文件。

考慮到以上背景信息,我們可以預測在未來幾年當中,容器技術將逐步取代虛擬機甚至能夠在一定程度上徹底占據其適用環境。去年,我曾經幫助多家企業立足於POC層級部署基於容器的解決方案。當時他們幾乎還都不想把容器引入生產環境。然而這種狀況可能隨著容器集群管理系統的逐步成熟而快速得到扭轉。

延伸阅读

评论