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