【討論】Docker會取代虛擬機(jī)嗎?
Docker無疑是當(dāng)下***影響力的開源項(xiàng)目。Docker何以如此的成功? 它是否取代虛擬機(jī),這樣的轉(zhuǎn)變是不是會在將來某一天出現(xiàn)的一個(gè)巨大的臨界點(diǎn)時(shí)突然爆發(fā)? 如果是的話,那會是什么時(shí)候?
為了解答這些問題,讓我們先來簡單的回顧一下過去的發(fā)展歷程吧!這樣也許能夠促使我們更好的了解當(dāng)下的狀況和展望未來。
在虛擬機(jī)技術(shù)普及之前,系統(tǒng)管理員們習(xí)慣于上線物理服務(wù)器來為他們的用戶提供服務(wù)。這個(gè)過程很繁瑣,無法實(shí)現(xiàn)完全的自動化,并且需要花費(fèi)幾個(gè)小時(shí)甚至幾天。如果出問題了,他們只能跑到機(jī)房去更換物理元件。
伴隨著虛擬機(jī)的出現(xiàn),DevOps人員可以在他們所有的物理服務(wù)器上任意的安裝Hypervisor,然后他們便可以在用戶提出申請時(shí)直接分配新的虛擬機(jī)。上線一臺虛擬機(jī)不再需要幾個(gè)小時(shí),而僅僅只需要幾分鐘就夠了,而且可以自動化完成。底層硬件的差異越來越少,而更多的是變得商務(wù)化。如果某個(gè)用戶需要更多額外的資源,創(chuàng)建一個(gè)新的虛擬機(jī)就行了。如果一個(gè)物理主機(jī)出現(xiàn)了故障,管理員只需要將該宿主機(jī)承載的虛擬機(jī)遷移或恢復(fù)到另外的宿主機(jī)即可。更細(xì)致 的部署模式變得可行和易于操作。
用戶不再需要把他們所有的程序都運(yùn)行在同一臺主機(jī)上,通過使用虛擬機(jī),他們可以將底層硬件的功用發(fā)揮到***。人們可以在一個(gè)虛擬機(jī)上跑數(shù)據(jù)庫, 在另外一個(gè)上面運(yùn)行中間件,然后在第三個(gè)上面跑web,而完全不用擔(dān)心硬件資源利用率的問題。在同一家企業(yè)里,一群人負(fù)責(zé)購買服務(wù)器物理硬件,而另外一群人負(fù)責(zé)軟件棧的架設(shè),他們的職能劃分相對獨(dú)立并且互不干涉。連接兩個(gè)團(tuán)隊(duì)的橋梁便是虛擬機(jī)。解決方案架構(gòu)師們可以方便廉價(jià)的將每個(gè)應(yīng)用部署到不同的虛擬機(jī) 上,而極大的減少了他們的運(yùn)維成本。正因?yàn)槿绱耍浖こ處焸円餐瑯酉矏鬯?。這也正是Hypervisor技術(shù)所帶來的***的創(chuàng)新。
幾年過去了,人們已經(jīng)習(xí)慣于通過虛擬機(jī)來承載他們的業(yè)務(wù)。初創(chuàng)公司甚至于不再傾向于購買服務(wù)器硬件資源了,他們只需要購買亞馬遜的AWS服務(wù)即可。如今,每個(gè)應(yīng)用一臺虛擬機(jī)已經(jīng)成為了部署軟件棧的標(biāo)準(zhǔn)方式。
自上世紀(jì)90年代以來,應(yīng)用程序的部署方式其實(shí)并沒有什么太大的變動。從那時(shí)候開始,如果我們需要部署一個(gè)應(yīng)用,那便需要安裝一個(gè)linux發(fā)行版本,而構(gòu)建的主要意義在于驅(qū)動硬件設(shè)備,然后我們需要安裝應(yīng)用所需要的deb或者rpm包,***才安裝和配置我們真正想要運(yùn)行的那個(gè)應(yīng)用。
直到2013年,Docker提出了一個(gè)簡單而有效的工具來創(chuàng)建、分發(fā)和部署應(yīng)用程序,它們以一種很贊的方式運(yùn)行在相對獨(dú)立的Linux容器里。另 外,針對眾多的應(yīng)用而言,它提出了一個(gè)registry的概念,這有點(diǎn)像蘋果的app store,這里為了清晰起見,我將其稱之為“云應(yīng)用”。部署 Nginx Web服務(wù)器就變成了類似"docker pull nginx"這樣簡單。這比安裝一個(gè)***版的Ubuntu LTS可簡單快捷多了。
Docker云應(yīng)用都是預(yù)配置的并且不再需要安裝一些Linux發(fā)行版附帶的無用的軟件包。事實(shí)上,Nginx Docker云應(yīng)用是由Nginx社區(qū)直接提供和分發(fā)的,而并非是Canonical或紅帽。
Docker最突出的創(chuàng)新之處在于引入了一整套包括registry在內(nèi)的云應(yīng)用標(biāo)準(zhǔn)規(guī)范。它不再是使用虛擬機(jī)的方式來運(yùn)行云應(yīng)用,取而代之的是利用Linux容器。 容器技術(shù)實(shí)際上在多年前就已經(jīng)出現(xiàn),但是一直以來只是在有限的幾個(gè)圈子里傳播,并沒有被大眾廣泛接受。盡管他們提供了非常好的性能體驗(yàn),但是較之虛擬機(jī)而言,他們提供的功能實(shí)在有限,并且隔離性方面很弱。作為一個(gè)后起之秀,Docker使得Linux容器突然變得流行,然而Docker之所以成功不能完全歸功于容器。這只是一個(gè)偶然罷了。
這么說來,容器技術(shù)本身到底存在些什么問題呢? 首先,他們對熱遷移技術(shù)的支持還很稚嫩,而且他們不能運(yùn)行在非原生的工作棧上(例如,在Linux上運(yùn)行Windows或者是在Windows在運(yùn)行Linux)。更進(jìn)一步來說,容器技術(shù)最主要的挑戰(zhàn)在于安全性:相對于虛擬機(jī)而言,它存在更多的潛在風(fēng)險(xiǎn)。實(shí)際上,在容器圈子里,無論是 Docker,CoreOS還是其他任何人,都不太建議多租戶的容器部署。在虛擬機(jī)的時(shí)代,你不必關(guān)心誰將會去使用它,又或者是它會被如何利用。而就容器 技術(shù)來說,在同一臺宿主機(jī)上,不太建議運(yùn)行歸屬于多個(gè)不同用戶的容器。亞馬遜和谷歌都提供了容器托管服務(wù),但是基于隔離性和安全性方面的考慮,他們都是將 每個(gè)容器運(yùn)行在對應(yīng)的一個(gè)單獨(dú)的虛擬機(jī)之上。這種方式可能看起來不是那么的高效,但是的確非常簡單實(shí)用。
人們也開始逐漸意識到這一點(diǎn)(譯者注:Docker和虛擬機(jī)結(jié)合的這一個(gè)點(diǎn))。在今年年初高調(diào)發(fā)起的一些項(xiàng)目正是嘗試將虛擬機(jī)的一些優(yōu)點(diǎn)融入到Docker當(dāng)中,其中***代表性的當(dāng)屬Intel和Hyper推出的Clear Linux項(xiàng)目。
他們均是直接使用傳統(tǒng)的虛擬機(jī)來運(yùn)行Docker云應(yīng)用(沒有Linux容器參與)。我們曾經(jīng)做過一些Xen的測試:針對這類用例,我們通過調(diào)優(yōu) Hypervisor,最終結(jié)果是得到了一個(gè)和Linux容器差不多的啟動時(shí)間,而其他所有的功能特性仍然得以保留。Intel為Xen做出的類似的努力和嘗試也將會在Xen開發(fā)者峰會上展示,而屆時(shí)Hyper也將秀出他們的一些工作成果。
新的方向似乎可以給我們的用戶提供一個(gè)兩全其美的方案:Docker的便利性和虛擬機(jī)的安全性的***結(jié)合。在可以預(yù)見的未來,Docker也許不會和虛擬機(jī)產(chǎn)生任何的競爭關(guān)系,取而代之的是,它將會成為其眾多承載對象的其中之一。