閱讀149 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《第一本Docker書(修訂版)》——第1章 簡介 1.1Docker簡介

本節書摘來自異步社區《第一本Docker書(修訂版)》一書中的第1章,第1.1節,作者:【澳】James Turnbull(詹姆斯•特恩布爾)著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看

第1章 簡介

在計算世界中,容器擁有一段漫長且傳奇的曆史。容器與管理程序虛擬化(hypervisor virtualization,HV)有所不同,管理程序虛擬化通過中間層將一台或多台獨立的機器虛擬運行於物理硬件之上,而容器則是直接運行在操作係統內核之上的用戶空間。因此,容器虛擬化也被稱為“操作係統級虛擬化”,容器技術可以讓多個獨立的用戶空間運行在同一台宿主機上。

由於“客居”於操作係統,容器隻能運行與底層宿主機相同或相似的操作係統,這看起來並不是非常靈活。例如,可以在Ubuntu服務器中運行RedHat Enterprise Linux,但卻無法在Ubuntu服務器上運行Microsoft Windows。

相對於徹底隔離的管理程序虛擬化,容器被認為是不安全的。而反對這一觀點的人則認為,由於虛擬機所虛擬的是一個完整的操作係統,這無疑增大了攻擊範圍,而且還要考慮管理程序層潛在的暴露風險。

盡管有諸多局限性,容器還是被廣泛部署於各種各樣的應用場合。在超大規模的多租戶服務部署、輕量級沙盒以及對安全要求不太高的隔離環境中,容器技術非常流行。最常見的一個例子就是“權限隔離監牢”(chroot jail),它創建一個隔離的目錄環境來運行進程。如果權限隔離監牢中正在運行的進程被入侵者攻破,入侵者便會發現自己“身陷囹圄”,因為權限不足被困在容器創建的目錄中,無法對宿主機進行進一步的破壞。

最新的容器技術引入了OpenVZ、Solaris Zones以及Linux容器(如lxc)。使用這些新技術,容器不再僅僅是一個單純的運行環境。在自己的權限範圍內,容器更像是一個完整的宿主機。對Docker來說,它得益於現代Linux內核特性,如控件組(control group)、命名空間(namespace)技術,容器和宿主機之間的隔離更加徹底,容器有獨立的網絡和存儲棧,還擁有自己的資源管理能力,使得同一台宿主機中的多個容器可以友好地共存。

容器經常被認為是精益技術,因為容器需要的開銷有限。和傳統的虛擬化以及半虛擬化(paravirtualization)相比,容器運行不需要模擬層(emulation layer)和管理層(hypervisor layer),而是使用操作係統的係統調用接口。這降低了運行單個容器所需的開銷,也使得宿主機中可以運行更多的容器。

盡管有著光輝的曆史,容器仍未得到廣泛的認可。一個很重要的原因就是容器技術的複雜性:容器本身就比較複雜,不易安裝,管理和自動化也很困難。而Docker就是為改變這一切而生。

1.1 Docker簡介

Docker是一個能夠把開發的應用程序自動部署到容器的開源引擎。由Docker公司(www.docker.com,前dotCloud公司,PaaS市場中的老牌提供商)的團隊編寫,基於Apache 2.0開源授權協議發行。
那麼Docker有什麼特別之處呢?Docker在虛擬化的容器執行環境中增加了一個應用程序部署引擎。該引擎的目標就是提供一個輕量、快速的環境,能夠運行開發者的程序,並方便高效地將程序從開發者的筆記本部署到測試環境,然後再部署到生產環境。Docker極其簡潔,它所需的全部環境隻是一台僅僅安裝了兼容版本的Linux內核和二進製文件最小限的宿主機。而Docker的目標就是要提供以下這些東西。

1.1.1 提供一個簡單、輕量的建模方式
Docker上手非常快,用戶隻需要幾分鍾,就可以把自己的程序“Docker化”(Dockerize)。Docker依賴於“寫時複製”(copy-on-write)模型,使修改應用程序也非常迅速,可以說達到了“隨心所至,代碼即改”的境界。

隨後,就可以創建容器來運行應用程序了。大多數Docker容器隻需不到1秒鍾即可啟動。由於去除了管理程序的開銷,Docker容器擁有很高的性能,同時同一台宿主機中也可以運行更多的容器,使用戶可以盡可能充分地利用係統資源。

1.1.2 職責的邏輯分離
使用Docker,開發人員隻需要關心容器中運行的應用程序,而運維人員隻需要關心如何管理容器。Docker設計的目的就是要加強開發人員寫代碼的開發環境與應用程序要部署的生產環境的一致性,從而降低那種“開發時一切都正常,肯定是運維的問題”的風險。

1.1.3 快速、高效的開發生命周期
Docker的目標之一就是縮短代碼從開發、測試到部署、上線運行的周期,讓你的應用程序具備可移植性,易於構建,並易於協作。

1.1.4 鼓勵使用麵向服務的架構
Docker還鼓勵麵向服務的架構和微服務架構[1]。Docker推薦單個容器隻運行一個應用程序或進程,這樣就形成了一個分布式的應用程序模型,在這種模型下,應用程序或服務都可以表示為一係列內部互聯的容器,從而使分布式部署應用程序,擴展或調試應用程序都變得非常簡單,同時也提高了程序的內省性。

注意
如果你願意,當然不必拘泥於這種模式,你可以輕鬆地在一個容器內運行多個進程的應用程序。

最後更新:2017-06-01 13:32:20

  上一篇:go  如果太陽突然爆炸 地球會發生什麼?| 1分鍾了解廣義相對論
  下一篇:go  馬雲清華EMBA演講:一個人要成功靠情商 要不敗靠智商