天天看點

《Docker技術入門與實戰》——1.1 什麼是Docker

本節書摘來自華章計算機《docker技術入門與實戰》一書中的第1章,第1.1節,作者:楊保華,戴王劍,曹亞侖著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

docker開源項目

docker是基于go語言實作的雲開源項目,誕生于2013年初,最初發起者是dotcloud公司。docker自開源後受到廣泛的關注和讨論,目前已有多個相關項目,逐漸形成了圍繞docker的生态體系。dotcloud公司後來也改名為docker inc,專注于docker相關技術和産品的開發。

docker項目目前已加入了linux基金會,遵循apache 2.0協定,全部開源代碼均在<code>https://github.com/docker/docker</code>上進行維護。在最近一次linux基金會的調查中,docker是僅次于openstack的最受歡迎的雲計算開源項目。

現在主流的linux作業系統都已經支援docker。例如,redhat rhel 6.5/ centos 6.5往上的作業系統、ubuntu 14.04作業系統,都已經預設帶有docker軟體包。google公司宣稱在其paas(platform as a service)平台及服務産品中廣泛應用了docker。微軟公司宣布和 docker公司合作,以加強其雲平台azure對docker的支援。公有雲提供商亞馬遜近期也推出了aws ec2 container,提供對docker的支援。

docker的主要目标是“build, ship and run any app, anywhere”,即通過對應用元件的封裝(packaging)、分發(distribution)、部署(deployment)、運作(runtime)等生命周期的管理,達到應用元件級别的“一次封裝,到處運作”。這裡的應用元件,既可以是一個web應用,也可以是一套資料庫服務,甚至是一個作業系統或編譯器。

docker基于linux的多項開源技術提供了高效、靈活和輕量級的容器方案,并且支援在多種主流雲平台(paas)和本地系統上部署。可以說docker為應用的開發和部署提供了“一站式”的解決方案。

linux容器技術

docker引擎的基礎是linux容器(linux containers,lxc)技術。ibm developerworks上給出了關于容器技術的準确描述:

容器有效地将由單個作業系統管理的資源劃分到孤立的組中,以便更好地在孤立的組之間平衡有沖突的資源使用需求。與虛拟化相比,這樣既不需要指令級模拟,也不需要即時編譯。容器可以在核心cpu本地運作指令,而不需要任何專門的解釋機制。此外,也避免了準虛拟化(paravirtualization)和系統調用替換中的複雜性。

linux容器其實不是一個全新的概念。最早的容器技術可以追溯到1982年unix系列作業系統上的chroot工具(直到今天,主流的unix、linux作業系統仍然支援和帶有該工具)。早期的容器實作技術包括sun solaris作業系統上的solaris containers(2004年釋出),freebsd作業系統上的freebsd jail(2000年左右出現),以及gnu/linux上的linux-vserver (2001年10月)和openvz(2005年)。

雖然這些技術經過多年的演化已經十分成熟,但是由于種種原因,這些容器技術并沒有被內建到主流的linux核心中,使用起來并不友善。例如,如果使用者要使用openvz技術,就需要先給作業系統打上特定的核心更新檔方可使用。

後來lxc項目借鑒了前人成熟的容器設計理念,并基于一系列新的核心特性實作了更具擴充性的虛拟化容器方案。更加關鍵的是,lxc被內建到了主流linux核心中,進而成為linux系統輕量級容器技術的事實标準。

從linux容器到docker

在lxc的基礎上,docker進一步優化了容器的使用體驗。docker提供了各種容器管理工具(如分發、版本、移植等)讓使用者無需關注底層的操作,可以簡單明了地管理和使用容器。使用者操作docker容器就像操作一個輕量級的虛拟機那樣簡單。

讀者可以簡單地将docker容器了解為一種沙盒(sandbox)。每個容器内運作一個應用,不同的容器互相隔離,容器之間也可以建立通信機制。容器的建立和停止都十分快速,容器自身對資源的需求也十分有限,遠遠低于虛拟機。很多時候,甚至直接把容器當作應用本身也沒有任何問題。

有理由相信,随着docker技術的進一步成熟,它将成為更受歡迎的容器虛拟化技術實作,得到更廣泛的應用。

繼續閱讀