Docker會取代虛擬機器嗎?

devopstarter.info發表於2015-08-20

  Docker 無疑是當下最具影響力的開源專案。Docker 何以如此的成功? 它會否取代虛擬機器,這樣的轉變是不是會在將來某一天出現的一個巨大的臨界點時突然爆發? 如果是的話,那會是什麼時候?

  為了解答這些問題,讓我們先來簡單的回顧一下過去的發展歷程吧,這樣也許能夠促使我們更好的瞭解當下的狀況和展望未來。

  在虛擬機器技術普及之前,系統管理員們習慣於上線物理伺服器來為他們的使用者提供服務。這個過程很繁瑣,無法實現完全的自動化,並且需要花費幾個小時甚至幾天。如果出問題了,他們只能跑到機房去更換物理元件。伴隨著虛擬機器的出現,DevOps人員可以在他們所有的物理伺服器上任意的安裝Hypervisor,然後他們便可以在使用者提出申請時直接分配新的虛擬機器。上線一臺虛擬機器不再需要幾個小時,而僅僅只需要幾分鐘就夠了,而且可以自動化完成。底層硬體的差異越來越少,而更多的是變得商務化。如果某個使用者需要更多額外的資源,建立一個新的虛擬機器就行了。如果一個物理主機出現了故障,管理員只需要將該宿主機承載的虛擬機器遷移或恢復到另外的宿主機即可。更細緻的部署模式變得可行和易於操作。使用者不再需要把他們所有的程式都執行在同一臺主機上,通過使用虛擬機器,他們可以將底層硬體的功用發揮到淋漓盡致。人們可以在一個虛擬機器上跑資料庫,在另外一個上面執行中介軟體,然後在第三個上面跑web,而完全不用擔心硬體資源利用率的問題。在同一家企業裡,一群人負責購買伺服器物理硬體,而另外一群人負責軟體棧的架設,他們的職能劃分相對獨立並且互不干涉。連線兩個團隊的橋樑便是虛擬機器。解決方案架構師們可以方便廉價的將每個應用部署到不同的虛擬機器上,而極大的減少了他們的運維成本。正因為如此,軟體工程師們也同樣喜愛它。這也正是Hypervisor技術所帶來的最大的創新。

  幾年過去了,人們已經習慣於通過虛擬機器來承載他們的業務。初創公司甚至於不再傾向於購買伺服器硬體資源了,他們只需要購買亞馬遜的AWS服務即可。如今,每個應用一臺虛擬機器已經成為了部署軟體棧的標準方式。

  自上世紀90年代以來,應用程式的部署方式其實並沒有什麼太大的變動。從那時候開始,如果我們需要部署一個應用,那便需要安裝一個linux發行版本,而構建的主要意義在於驅動硬體裝置,然後我們需要安裝應用所需要的deb或者rpm包,最後才安裝和配置我們真正想要執行的那個應用。

  直到2013年,Docker提出了一個簡單而有效的工具來建立、分發和部署應用程式,它們以一種很讚的方式執行在相對獨立的Linux容器裡。另外,針對眾多的應用而言,它提出了一個registry的概念,這有點像蘋果的app store,這裡為了清晰起見,我將其稱之為“雲應用”。部署 Nginx Web 伺服器就變成了類似"docker pull nginx"這樣簡單。這比安裝一個最新版的Ubuntu LTS可簡單快捷多了。

  Docker雲應用都是預配置的並且不再需要安裝一些Linux 發行版附帶的無用的軟體包。事實上,Nginx Docker雲應用是由Nginx社群直接提供和分發的,而並非是Canonical或紅帽。

  Docker 最突出的創新之處在於引入了一整套包括registry在內的雲應用標準規範。它不再是使用虛擬機器的方式來執行雲應用,取而代之的是利用Linux容器。容器技術實際上在多年前就已經出現,但是一直以來只是在有限的幾個圈子裡傳播,並沒有被大眾廣泛接受。儘管他們提供了非常好的效能體驗,但是較之虛擬機器而言,他們提供的功能實在有限,並且隔離性方面很弱。作為一個後起之秀,Docker使得Linux容器突然變得流行,然而Docker之所以成功不能完全歸功於容器。這只是一個偶然罷了。

  這麼說來,容器技術本身到底存在些什麼問題呢? 首先,他們對熱遷移技術的支援還很稚嫩,而且他們不能執行在非原生的工作棧上(例如,在Linux上執行Windows或者是在Windows在執行Linux)。更進一步來說,容器技術最主要的挑戰在於安全性:相對於虛擬機器而言,它存在更多的潛在風險。實際上,在容器圈子裡,無論是Docker,CoreOS還是其他任何人,都不太建議多租戶的容器部署。在虛擬機器的時代,你不必關心誰將會去使用它,又或者是它會被如何利用。而就容器技術來說,在同一臺宿主機上,不太建議執行歸屬於多個不同使用者的容器。亞馬遜和谷歌都提供了容器託管服務,但是基於隔離性和安全性方面的考慮,他們都是將每個容器執行在對應的一個單獨的虛擬機器之上。這種方式可能看起來不是那麼的高效,但是的確非常簡單實用。

  人們也開始逐漸意識到這一點(譯者注:Docker和虛擬機器結合的這一個點)。在今年年初高調發起的一些專案正是嘗試將虛擬機器的一些優點融入到Docker當中,其中最具代表性的當屬Intel和Hyper推出的Clear Linux專案。

  他們均是直接使用傳統的虛擬機器來執行Docker雲應用(沒有Linux容器參與)。我們曾經做過一些Xen的測試:針對這類用例,我們通過調優Hypervisor,最終結果是得到了一個和Linux容器差不多的啟動時間,而其他所有的功能特性仍然得以保留。Intel為Xen做出的類似的努力和嘗試也將會在Xen開發者峰會上展示,而屆時Hyper也將秀出他們的一些工作成果。

  新的方向似乎可以給我們的使用者提供一個兩全其美的方案:Docker的便利性和虛擬機器的安全性的完美結合。在可以預見的未來,Docker也許不會和虛擬機器產生任何的競爭關係,取而代之的是,它將會成為其眾多承載物件的其中之一。

  原文:https://blog.xenproject.org/2015/08/11/will-docker-replace-virtual-machines/

相關文章