Docker究竟是什麼?爲何它這麼火!



若是你是數據中心或雲計算IT圈子的人,這一年多來應該一直在聽到普通的容器、尤爲是Docker,關於它們的新聞從未間斷過。Docker1.0在今年6月發佈後,聲勢更是達到了史無前例的程度。web

 

動靜之因此這麼大,就是由於許多公司在以驚人的速度採用Docker。在今年7月的開源大會(OSCon)上,我遇到了早已將服務器應用程序從虛擬機(VM)轉移到容器的無數企業。的確,Docker公司主管服務和支持的副總裁James Turnbull在會上告訴我,其中有三家大銀行一直在使用Docker的測試版,現已在生產環境中使用Docker。對任何早期技術來講,這無疑是極大的充滿自信的舉動,要知道它在安全至上的金融界幾乎聞所未聞。docker

與此同時,Docker這項開源技術不只僅是紅帽和Canonical等Linux巨頭眼裏的寵兒。微軟等專有軟件公司也在熱烈擁抱Docker。安全

那麼,爲何你們都追捧容器和Docker呢?James Bottomley是Parallels公司的服務器虛擬化首席技術官,也是一位知名的Linux內核開發人員。他向我解釋,Hyper-V、KVM和Xen等虛擬機管理程序都「基於虛擬化硬件仿真機制。這意味着,它們對系統要求很高。」服務器

然而,容器卻使用共享的操做系統。這意味着它們在使用系統資源方面比虛擬機管理程序要高效得多。容器不是對硬件進行虛擬化處理,而是駐留在單單一個Linux實例上。這反過來意味着,你能夠「丟棄沒有用的99.9%的虛擬機垃圾,剩下一個小巧簡潔的膠囊式容器,裏面含有你的應用程序,」Bottomley如是說。網絡

據Bottomley聲稱,所以,藉助通過全面調優的容器系統,你就能夠在同一硬件上擁有數量比使用Xen虛擬機或KVM虛擬機多出四到六倍的服務器應用實例。架構

是否是以爲聽起來很不錯?畢竟,你可讓服務器運行多得多的應用程序。那麼,爲何以前沒有人作過呢?實際上,以前有人作過。容器實際上是個舊概念。分佈式

容器能夠追溯到至少2000年和FreeBSD Jails。甲骨文Solaris也有一個相似概念,名爲Zones;Parallels、谷歌和Docker等公司一直在致力於研發諸如OpenVZ和LXC(Linux容器)之類的開源項目,旨在讓容器運行起來順暢又安全。ide

的確,不多有人知道容器,但大多數人多年來一直在使用容器。谷歌就有本身的開源容器技術lmctfy(Let Me Contain That For You,意爲「讓我容納你的程序」)。只要你使用谷歌的某項功能:好比搜索、Gmail、Google Docks或不管其餘什麼,就分配了一個新的容器。微服務

然而,Docker創建在LXC的基礎上。與任何容器技術同樣,就該程序而言,它有本身的文件系統、存儲系統、處理器和內存等部件。容器與虛擬機之間的區別主要在於,虛擬機管理程序對整個設備進行抽象處理,而容器只是對操做系統內核進行抽象處理。工具

這反過來意味着:虛擬機管理程序能作容器作不了的一件事就是,使用不一樣的操做系統或內核。因此,舉例說,你可使用微軟Azure,同時運行Windows Server2012的實例和SUSE Linux企業級服務器的實例。至於Docker,全部容器都必須使用一樣的操做系統和內核。

另外一方面,若是你只是想讓儘量多的服務器應用實例在儘量少的硬件上運行,可能不大關心運行多個操做系統虛擬機。要是同一應用程序的多個副本正是你須要的,那麼你會喜歡上容器。

改用Docker這一舉措有望每一年爲數據中心或雲計算服務提供商節省數千萬美圓的電力和硬件成本。因此難怪它們在一窩蜂地儘快採用Docker。

Docker帶來了以前技術所沒有的幾個新特色。第一是,與以前的方法相比,Docker讓容器部署和使用起來更容易、更安全。此外,因爲Docker與其餘容器領域的巨擘進行了合做,包括Canonical、谷歌、紅帽和Parallels,共同開發其關鍵的開源組件libcontainer,它爲容器帶來了迫切須要的標準化。

與此同時,廣大開發人員可使用Docker封裝、交付和運行任何應用程序,應用程序成爲輕型的、可移植的、自給自足的LXC容器,能夠在任何地方運行。正如Bottomley告訴我,「容器讓你當即享有應用程序可移植性。」

市場研究公司451 Research的資深分析師Jay Lyman補充道:「企業組織力求以一種高效、標準化、可重複的方式,讓應用程序和工做負載更易於移植和分發,而有時很難作到這點。正如GitHub經過共享源代碼來促進合做和創新那樣,Docker Hub、Official Repos和商業支持也在幫助衆多企業經過改進封裝、部署和管理應用程序的方式,應對這個難題。」

最後但並不是最不重要的,Docker容器易於部署到雲端。正如Ben Lloyd Pearson在opensource.com上寫道:「Docker採用了一種特別的方式,以即可以整合到大多數DevOps(開發運營)應用程序當中,包括Puppet、Chef、Vagrant和Ansible,或者能夠獨自使用,以管理開發環境。主要賣點是,它簡化了一般由另外這些應用程序執行的好多任務。具體來講,有了Docker,人們就能夠搭建與活動服務器如出一轍的本地開發環境,從同一個主機運行多個開發環境(每一個開發環境有獨特的軟件、操做系統和配置),在新的或不一樣的服務器上測試項目,以及讓任何人均可以在設置如出一轍的狀況下處理同一項目,不管本地主機環境怎樣。」

簡而言之,Docker能爲你作的事情就是:相比其餘技術,它能讓更多數量的應用程序在同一硬件上運行;它讓開發人員易於快速構建可隨時運行的容器化應用程序;它大大簡化了管理和部署應用程序的任務。總而言之,我能理解做爲一項企業級技術,Docker爲什麼一會兒躥紅。我只是但願它不負衆望,不然外頭會有一些憂心忡忡的CEO和CIO。





八個Docker的真實應用場景

【編者的話】Flux 7介紹了經常使用的8個Docker的真實使用場景,分別是簡化配置、代碼流水線管理、提升開發效率、隔離應用、整合服務器、調試能力、多租戶環境、快速部署。咱們一直在談Docker,Docker怎麼使用,在怎麼樣的場合下使用?也許本文能夠幫到你。有須要交流的地方,能夠經過評論與咱們交流。

docker-use-cases.png


幾周前咱們參加了 DockerCon ,Dockercon是首個以Docker爲中心的技術大會。它面向開發者以及對在Docker開放平臺上構建、交付、運行分佈式應用感興趣的從業者,不論這些開放平臺是運行於自用筆記本上或者是數據中心的虛擬機上。咱們參加了此次大會,Flux7是Docker基礎的系統集成合做夥伴,同時也是演講嘉賓。

咱們的CEO Aater Suleman和咱們的一位客戶一同進行了演講。雖然DockerCon大會十分有趣,但我以爲大會太關注Docker的具體細節,而忽略了Docker的使用場景。因此,在這篇文章中,我想介紹並分享一些Docker的實際應用案例。

在咱們討論Docker的使用場景以前,先來看看Docker這個工具備什麼特別的地方吧。

Docker提供了輕量級的虛擬化,它幾乎沒有任何額外開銷,這個特性很是酷。

首先你在享有Docker帶來的虛擬化能力的時候無需擔憂它帶來的額外開銷。其次,相比於虛擬機,你能夠在同一臺機器上建立更多數量的容器。

Docker的另一個優勢是容器的啓動與中止都能在幾秒中內完成。Docker公司的創始人 Solomon Hykes曾經介紹過Docker在單純的LXC之上作了哪些 事情,你能夠去看看。

下面是我總結的一些Docker的使用場景,它爲你展現瞭如何藉助Docker的優點,在低開銷的狀況下,打造一個一致性的環境。

1. 簡化配置

這是Docker公司宣傳的Docker的主要使用場景。虛擬機的最大好處是能在你的硬件設施上運行各類配置不同的平臺(軟件、系統),Docker在下降額外開銷的狀況下提供了一樣的功能。它能讓你將運行環境和配置放在代碼中而後部署,同一個Docker的配置能夠在不一樣的環境中使用,這樣就下降了硬件要求和應用環境之間耦合度。

2. 代碼流水線(Code Pipeline)管理

前一個場景對於管理代碼的流水線起到了很大的幫助。代碼從開發者的機器到最終在生產環境上的部署,須要通過不少的中間環境。而每個中間環境都有本身微小的差異,Docker給應用提供了一個從開發到上線均一致的環境,讓代碼的流水線變得簡單很多。

3. 提升開發效率

這就帶來了一些額外的好處:Docker能提高開發者的開發效率。若是你想看一個詳細一點的例子,能夠參考Aater在 DevOpsDays Austin 2014 大會或者是DockerCon上的演講。

不一樣的開發環境中,咱們都想把兩件事作好。一是咱們想讓開發環境儘可能貼近生產環境,二是咱們想快速搭建開發環境。

理想狀態中,要達到第一個目標,咱們須要將每個服務都跑在獨立的虛擬機中以便監控生產環境中服務的運行狀態。然而,咱們卻不想每次都須要網絡鏈接,每次從新編譯的時候遠程鏈接上去特別麻煩。這就是Docker作的特別好的地方,開發環境的機器一般內存比較小,以前使用虛擬的時候,咱們常常須要爲開發環境的機器加內存,而如今Docker能夠輕易的讓幾十個服務在Docker中跑起來。

4. 隔離應用

有不少種緣由會讓你選擇在一個機器上運行不一樣的應用,好比以前提到的提升開發效率的場景等。

咱們常常須要考慮兩點,一是由於要下降成本而進行服務器整合,二是將一個總體式的應用拆分紅松耦合的單個服務(譯者注:微服務架構)。若是你想了解爲何鬆耦合的應用這麼重要,請參考Steve Yege的 這篇論文,文中將Google和亞馬遜作了比較。

5. 整合服務器

正如經過虛擬機來整合多個應用,Docker隔離應用的能力使得Docker能夠整合多個服務器以下降成本。因爲沒有多個操做系統的內存佔用,以及能在多個實例之間共享沒有使用的內存,Docker能夠比虛擬機提供更好的服務器整合解決方案。

6. 調試能力

Docker提供了不少的工具,這些工具不必定只是針對容器,可是卻適用於容器。它們提供了不少的功能,包括能夠爲容器設置檢查點、設置版本和查看兩個容器之間的差異,這些特性能夠幫助調試Bug。你能夠在 《Docker拯救世界》的文章中找到這一點的例證。

7. 多租戶環境

另一個Docker有意思的使用場景是在多租戶的應用中,它能夠避免關鍵應用的重寫。咱們一個特別的關於這個場景的例子是爲IoT(譯者注:物聯網)的應用開發一個快速、易用的多租戶環境。這種多租戶的基本代碼很是複雜,很難處理,從新規劃這樣一個應用不但消耗時間,也浪費金錢。

使用Docker,能夠爲每個租戶的應用層的多個實例建立隔離的環境,這不只簡單並且成本低廉,固然這一切得益於Docker環境的啓動速度和其高效的 diff命令。

你能夠在 這裏瞭解關於此場景的更多信息。

8. 快速部署

在虛擬機以前,引入新的硬件資源須要消耗幾天的時間。虛擬化技術(Virtualization)將這個時間縮短到了分鐘級別。而Docker經過爲進程僅僅建立一個容器而無需啓動一個操做系統,再次將這個過程縮短到了秒級。這正是Google和Facebook都看重的特性。 你能夠在數據中心建立銷燬資源而無需擔憂從新啓動帶來的開銷。一般數據中心的資源利用率只有30%,經過使用Docker並進行有效的資源分配能夠提升資源的利用率。Vsa
相關文章
相關標籤/搜索