為什么選擇 Docker

虛擬化

要解釋清楚 Docker,首先要解釋清楚容器(Container)的概念。要解釋容器的話亩码,就需要從操作系統(tǒng)說(shuō)起。操作系統(tǒng)太底層野瘦,細(xì)說(shuō)的話一兩本書都說(shuō)不清楚描沟。這里就一句話來(lái)總結(jié)一下:操作系統(tǒng)(Operating System,簡(jiǎn)稱OS)是管理計(jì)算機(jī)硬件與軟件資源的計(jì)算機(jī)程序鞭光,并且為軟件運(yùn)行提供通用服務(wù)的系統(tǒng)軟件啊掏。

隨著硬件的性能提升,軟件種類的豐富衰猛,有兩種情況變得很常見:

  1. 硬件性能過(guò)食倜郏——很多計(jì)算機(jī)的硬件配置,往往會(huì)有大量時(shí)間處于硬件資源閑置的狀態(tài)啡省。例如一般家用電腦娜睛,已經(jīng)是四核、六核的配置了卦睹,除了3A游戲畦戒、視頻制作、3D渲染结序、高性能計(jì)算等特殊應(yīng)用外障斋,通常有 90% 以上時(shí)間 CPU 是閑置的;

  2. 軟件沖突——因?yàn)闃I(yè)務(wù)需要徐鹤,兩個(gè)或者多個(gè)軟件之間沖突呛每,或者需要同一個(gè)軟件的不同版本灾炭。例如早幾年做 Web 前端的微饥,要測(cè)試網(wǎng)頁(yè)在不同版本的 IE 上是否能正常顯示头岔,然而 Windows 只能裝一個(gè)版本的 IE。

為了解決軟件沖突劲赠,只能配置多臺(tái)計(jì)算機(jī)涛目,或者很麻煩的在同一臺(tái)電腦上安裝多個(gè)操作系統(tǒng)。顯然這兩個(gè)方案都有其缺點(diǎn):多臺(tái)計(jì)算機(jī)成本太高凛澎,多操作系統(tǒng)的安裝霹肝、切換都很麻煩。在硬件性能過(guò)剩的時(shí)候塑煎,硬件虛擬化的普及就很自然而然的提出來(lái)了沫换。

所謂硬件虛擬化,就是某個(gè)特殊的軟件轧叽,仿真出一臺(tái)或者多臺(tái)計(jì)算機(jī)的各種硬件苗沧,用戶可以在這一臺(tái)虛擬機(jī)上安裝刊棕、運(yùn)行操作系統(tǒng)(一般叫來(lái)賓操作系統(tǒng)炭晒,Guest OS)和各種應(yīng)用待逞,并且把 Guest OS 和上面應(yīng)用軟件對(duì)硬件資源的訪問(wèn)轉(zhuǎn)發(fā)到底層的硬件上來(lái)實(shí)現(xiàn)。

對(duì)于 Guest OS 和上面的應(yīng)用程序來(lái)說(shuō)网严,這臺(tái)虛擬機(jī)和普通物理計(jì)算機(jī)是完全一樣沒(méi)有任何區(qū)別的——除了性能可能差一點(diǎn)识樱。全球第一人氣的 VMware Workstation 就是這么一個(gè)軟件,Oracle 的 VirtualBox 以及 Microsoft 的 Virtual PC 都是震束。這類軟件英語(yǔ)有一個(gè)專用的單詞是 Hypervisor(虛擬機(jī)管理程序)怜庸。

image.png

虛擬機(jī)的優(yōu)點(diǎn)

可以把資源分配到不同的虛擬機(jī),達(dá)到硬件資源的最大化利用垢村;

相比直接在物理機(jī)上部署應(yīng)用割疾,虛擬機(jī)更容易擴(kuò)展應(yīng)用;

云服務(wù):通過(guò)虛擬機(jī)虛擬出不同的物理資源嘉栓,可以快速搭建云服務(wù)宏榕。

虛擬化技術(shù)主要用來(lái)解決高性能的物理硬件產(chǎn)能過(guò)剩和老舊的硬件硬件產(chǎn)品產(chǎn)能過(guò)低的重組重用,透明化底層物理硬件侵佃,從而最大化的利用物理硬件麻昼。

虛擬機(jī)的缺點(diǎn)

虛擬機(jī)的缺點(diǎn)在于 Guest OS 通常會(huì)占用不少硬件資源。例如 Windows 安裝 VMware 并開機(jī) Guest OS馋辈,不運(yùn)行任何應(yīng)用的情況下抚芦,就需要占用 2 ~ 3G 內(nèi)存,20 ~ 30G 硬盤空間迈螟。而且為了應(yīng)用系統(tǒng)運(yùn)行的性能叉抡,往往還要給每臺(tái)虛擬機(jī)留出更多的內(nèi)存容量。雖然不少 Hypervisor 支持動(dòng)態(tài)內(nèi)存答毫,但基本上都會(huì)降低虛擬機(jī)的性能卜壕。在這樣的資源占用情況下,少量的虛擬機(jī)還是可以接受的烙常,如果同時(shí)運(yùn)行十多臺(tái)或數(shù)十臺(tái)虛擬機(jī)轴捎,硬件資源的浪費(fèi)就會(huì)成倍遞增。通常來(lái)說(shuō)蚕脏,其中相當(dāng)大一部分甚至全部 Guest OS 都是相同的侦副。

能不能所有應(yīng)用使用同一個(gè)操作系統(tǒng)減少硬件資源的浪費(fèi),但是又能避免包括運(yùn)行庫(kù)在內(nèi)的軟件沖突呢驼鞭?操作系統(tǒng)層虛擬化——容器概念的提出秦驯,就是為了解決這個(gè)問(wèn)題。Docker 就是一個(gè)容器的標(biāo)準(zhǔn)化實(shí)現(xiàn)挣棕。

容器化

容器技術(shù)已經(jīng)發(fā)展了很長(zhǎng)一段時(shí)間了译隘,例如:LXC亲桥,BSD Jails,Solaris Zones…

image.png

容器化就是應(yīng)用程序級(jí)別的虛擬化技術(shù)固耘。容器提供了將應(yīng)用程序的代碼题篷、運(yùn)行時(shí)、系統(tǒng)工具厅目、系統(tǒng)庫(kù)和配置打包到一個(gè)實(shí)例中的標(biāo)準(zhǔn)方法番枚。容器共享一個(gè)內(nèi)核(操作系統(tǒng)),它安裝在硬件上损敷。

image.png

和虛擬機(jī)相比葫笼,容器有以下優(yōu)點(diǎn):

  1. 啟動(dòng)迅速:沒(méi)有虛擬機(jī)硬件的初始化,沒(méi)有 Guest OS 的啟動(dòng)過(guò)程拗馒,可以節(jié)約很多啟動(dòng)時(shí)間路星,這就是容器的“開箱即用”;

  2. 占用資源少:沒(méi)有運(yùn)行 Guest OS 所需的內(nèi)存開銷诱桂,無(wú)需為虛擬機(jī)預(yù)留運(yùn)行內(nèi)存洋丐,無(wú)需安裝、運(yùn)行 App 不需要的運(yùn)行庫(kù)/操作系統(tǒng)服務(wù)访诱,內(nèi)存占用垫挨、存儲(chǔ)空間占用都小的多。相同配置的服務(wù)器触菜,如果運(yùn)行虛擬機(jī)能運(yùn)行十多臺(tái)的九榔,通常可以運(yùn)行上百個(gè)容器毫無(wú)壓力——當(dāng)然前提是單個(gè)容器應(yīng)用本身不會(huì)消耗太多資源涡相。

Docker 歷史

2010 年哲泊,幾個(gè)搞 IT 的年輕人,在美國(guó)舊金山成立了一家名叫 dotCloud 的公司催蝗。dotCloud 的平臺(tái)即服務(wù)(Platform-as-a-Service, PaaS)提供商切威。底層技術(shù)上,dotCloud 平臺(tái)利用了 Linux 的 LXC 容器技術(shù)丙号。

image.png

為了方便創(chuàng)建和管理這些容器先朦,dotCloud 基于 Google 公司推出的 Go 語(yǔ)言開發(fā)了一套內(nèi)部工具,之后被命名為 Docker犬缨。Docker 就是這樣誕生的喳魏。

LXC 是 Docker 的底層基石,但是在 Docker 0.9 版本的時(shí)候怀薛,Docker 見異思遷了刺彩,引入了基于 Go 語(yǔ)言構(gòu)建的 Libcontainer 的 execution driver。有了 Libcontainer 這個(gè)項(xiàng)目,Docker 不再需要依賴于 Linux 部件(LXC创倔,libvirt嗡害,systemd-nspawn…)就可以處理 namespaces、control groups畦攘、capabilities霸妹、apparmor profiles、network interfaces念搬。這下抑堡,LXC 淪為可選項(xiàng)摆出。

image.png

在 Docker 1.8 中 LXC 被 deprecated朗徊,在 Docker 1.10,LXC 徹底出局偎漫。Docker 推出 Libcontainer 自己集成了 Linux 內(nèi)核中的很多特性爷恳,作為一個(gè)獨(dú)特、穩(wěn)定且不受制于 Linux 的 Library象踊,獨(dú)立的時(shí)代終于到來(lái)了温亲。

image.png

如同 Docker 的 Logo 一樣,Docker 的思想來(lái)源于集裝箱杯矩。集裝箱解決了什么問(wèn)題栈虚?在一艘大船上,可以把貨物規(guī)整的擺放起來(lái)史隆,并且各種各樣的貨物被集裝箱標(biāo)準(zhǔn)化魂务,集裝箱與集裝箱之間互不影響。那么就不需要專門運(yùn)送水果的船和專門運(yùn)送化學(xué)用品的船了泌射。只要這些貨物封裝在不同的集裝箱里粘姜,就可以用一艘大船把它們都運(yùn)走。

Docker 技術(shù)誕生之后熔酷,并沒(méi)有引起行業(yè)的關(guān)注孤紧。而 dotCloud 公司,作為一家小型創(chuàng)業(yè)企業(yè)拒秘,在激烈的競(jìng)爭(zhēng)之下号显,也步履維艱。

正當(dāng)他們快要堅(jiān)持不下去的時(shí)候躺酒,腦子里蹦出了“開源”的想法押蚤。什么是“開源”?開源阴颖,就是開放源代碼活喊。也就是將原來(lái)內(nèi)部保密的程序源代碼開放給所有人,然后讓大家一起參與進(jìn)來(lái),貢獻(xiàn)代碼和意見钾菊。

有的軟件一開始就是開源的帅矗。也有的軟件,是混不下去煞烫,創(chuàng)造者又不想放棄浑此,所以選擇開源。自己養(yǎng)不活滞详,就吃“百家飯”嘛凛俱。2013 年 3 月,dotCloud 公司的創(chuàng)始人之一料饥,Docker 之父蒲犬,28 歲的 Solomon?Hykes 正式?jīng)Q定,將 Docker 項(xiàng)目開源岸啡。

image.png

不開則已原叮,一開驚人。越來(lái)越多的 IT 工程師發(fā)現(xiàn)了 Docker 的優(yōu)點(diǎn)巡蘸,然后蜂擁而至奋隶,加入 Docker 開源社區(qū)。Docker 的人氣迅速攀升悦荒,速度之快唯欣,令人瞠目結(jié)舌。

開源當(dāng)月搬味, Docker 0.1 版本發(fā)布境氢。此后的每一個(gè)月, Docker 都會(huì)發(fā)布一個(gè)版本身腻。到 2014 年 6 月 9 日产还, Docker 1.0 版本正式發(fā)布。

此時(shí)的 Docker嘀趟,已經(jīng)成為行業(yè)里人氣最火爆的開源技術(shù)脐区,沒(méi)有之一。甚至像 Google她按、微軟牛隅、Amazon、 VMware 這樣的巨頭們都對(duì)它青睞有加酌泰,表示將全力支持媒佣。

Docker 火了之后, dotCloud 公司干脆把公司名字也改成了 Docker Inc. 陵刹。

為什么選擇 Docker

更高效的利用系統(tǒng)資源

由于容器不需要進(jìn)行硬件虛擬以及運(yùn)行完整操作系統(tǒng)等額外開銷默伍,Docker 對(duì)系統(tǒng)資源的利用率更高。無(wú)論是應(yīng)用執(zhí)行速度、內(nèi)存損耗或者文件存儲(chǔ)速度也糊,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效炼蹦。因此,相比虛擬機(jī)技術(shù)狸剃,一個(gè)相同配置的主機(jī)掐隐,往往可以運(yùn)行更多數(shù)量的應(yīng)用。

更快速的啟動(dòng)時(shí)間

傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往需要數(shù)分鐘钞馁,而 Docker 容器應(yīng)用虑省,由于直接運(yùn)行于宿主內(nèi)核,無(wú)需啟動(dòng)完整的操作系統(tǒng)僧凰,因此可以做到秒級(jí)探颈、甚至毫秒級(jí)的啟動(dòng)時(shí)間。大大的節(jié)約了開發(fā)允悦、測(cè)試膝擂、部署的時(shí)間虑啤。

一致的運(yùn)行環(huán)境

開發(fā)過(guò)程中一個(gè)常見的問(wèn)題是環(huán)境一致性問(wèn)題隙弛。由于開發(fā)環(huán)境、測(cè)試環(huán)境狞山、生產(chǎn)環(huán)境不一致全闷,導(dǎo)致有些 bug 并未在開發(fā)過(guò)程中被發(fā)現(xiàn)。而 Docker 的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境萍启,確保了應(yīng)用運(yùn)行環(huán)境一致性总珠,從而不會(huì)再出現(xiàn)「這段代碼在我機(jī)器上沒(méi)問(wèn)題啊」 這類問(wèn)題。

持續(xù)交付和部署

對(duì)開發(fā)和運(yùn)維(DevOps)人員來(lái)說(shuō)勘纯,最希望的就是一次創(chuàng)建或配置局服,可以在任意地方正常運(yùn)行。

使用 Docker 可以通過(guò)定制應(yīng)用鏡像來(lái)實(shí)現(xiàn)持續(xù)集成驳遵、持續(xù)交付淫奔、部署。開發(fā)人員可以通過(guò) Dockerfile 來(lái)進(jìn)行鏡像構(gòu)建堤结,并結(jié)合持續(xù)集成(Continuous Integration)系統(tǒng)進(jìn)行集成測(cè)試唆迁,而運(yùn)維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像,甚至結(jié)合持續(xù)部署(Continuous Delivery/Deployment)系統(tǒng)進(jìn)行自動(dòng)部署竞穷。

而且使用 Dockerfile 使鏡像構(gòu)建透明化唐责,不僅僅開發(fā)團(tuán)隊(duì)可以理解應(yīng)用運(yùn)行環(huán)境,也方便運(yùn)維團(tuán)隊(duì)理解應(yīng)用運(yùn)行所需條件瘾带,幫助更好的在生產(chǎn)環(huán)境中部署該鏡像鼠哥。

更輕松的遷移

由于 Docker 確保了執(zhí)行環(huán)境的一致性,使得應(yīng)用的遷移更加容易。Docker 可以在很多平臺(tái)上運(yùn)行朴恳,無(wú)論是物理機(jī)科盛、虛擬機(jī)、公有云菜皂、私有云贞绵,甚至是筆記本,其運(yùn)行結(jié)果是一致的恍飘。因此用戶可以很輕易的將在一個(gè)平臺(tái)上運(yùn)行的應(yīng)用榨崩,遷移到另一個(gè)平臺(tái)上,而不用擔(dān)心運(yùn)行環(huán)境的變化導(dǎo)致應(yīng)用無(wú)法正常運(yùn)行的情況章母。

更輕松的維護(hù)和擴(kuò)展

Docker 使用的分層存儲(chǔ)以及鏡像的技術(shù)母蛛,使得應(yīng)用重復(fù)部分的復(fù)用更為容易,也使得應(yīng)用的維護(hù)更新更加簡(jiǎn)單乳怎,基于基礎(chǔ)鏡像進(jìn)一步擴(kuò)展鏡像也變得非常簡(jiǎn)單彩郊。此外,Docker 團(tuán)隊(duì)同各個(gè)開源項(xiàng)目團(tuán)隊(duì)一起維護(hù)了一大批高質(zhì)量的 官方鏡像蚪缀,既可以直接在生產(chǎn)環(huán)境使用秫逝,又可以作為基礎(chǔ)進(jìn)一步定制,大大的降低了應(yīng)用服務(wù)的鏡像制作成本询枚。

容器與虛擬機(jī)的比較

下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處违帆,可見容器是在操作系統(tǒng)層面上實(shí)現(xiàn)虛擬化,直接復(fù)用本地主機(jī)的操作系統(tǒng)金蜀,而傳統(tǒng)方式則是在硬件層面實(shí)現(xiàn)刷后。

image.png

與傳統(tǒng)的虛擬機(jī)相比,Docker 優(yōu)勢(shì)體現(xiàn)為啟動(dòng)速度快渊抄、占用體積小尝胆。

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市护桦,隨后出現(xiàn)的幾起案子含衔,更是在濱河造成了極大的恐慌,老刑警劉巖嘶炭,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抱慌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡眨猎,警方通過(guò)查閱死者的電腦和手機(jī)抑进,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)睡陪,“玉大人寺渗,你說(shuō)我怎么就攤上這事匿情。” “怎么了信殊?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵炬称,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我涡拘,道長(zhǎng)玲躯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任鳄乏,我火速辦了婚禮跷车,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘橱野。我一直安慰自己朽缴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布水援。 她就那樣靜靜地躺著密强,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜗元。 梳的紋絲不亂的頭發(fā)上或渤,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音许帐,去河邊找鬼劳坑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛成畦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涝开,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼循帐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了舀武?” 一聲冷哼從身側(cè)響起拄养,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎银舱,沒(méi)想到半個(gè)月后瘪匿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寻馏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年棋弥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诚欠。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顽染,死狀恐怖漾岳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粉寞,我是刑警寧澤尼荆,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站唧垦,受9級(jí)特大地震影響捅儒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜振亮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一野芒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧双炕,春花似錦狞悲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至站超,卻和暖如春荸恕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背死相。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工融求, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人算撮。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓生宛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親肮柜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陷舅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361