Docker學(xué)習(xí)一颊埃、docker核心概念及原理

一蔬充、Docker簡介

Docker是一個(gè)開源的應(yīng)用容器引擎,基于 GO語言并遵從Apache2.0協(xié)議開源班利。Docker可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級饥漫、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上罗标,可以實(shí)現(xiàn)虛擬化庸队。

Docker所代表的容器虛擬化技術(shù)屬于操作系統(tǒng)級虛擬化:內(nèi)核通過創(chuàng)建多個(gè)虛擬的操作系統(tǒng)實(shí)例(內(nèi)核和庫)來隔離不同的進(jìn)程。并且傳統(tǒng)虛擬化技術(shù)是在硬件層面實(shí)現(xiàn)虛擬化闯割,增加了系統(tǒng)調(diào)用鏈路的環(huán)節(jié)彻消,有性能損耗;容器虛擬化技術(shù)以共享Kernel的方式實(shí)現(xiàn)宙拉,幾乎沒有性能損耗宾尚。這里可以將容器理解為一種沙盒。每個(gè)容器內(nèi)運(yùn)行一個(gè)應(yīng)用谢澈,不同的容器相互隔離煌贴,容器之間可以建立通信機(jī)制。容器的創(chuàng)建和停止都十分快速(秒級)澳化,容器自身對資源的需求十分有限崔步,遠(yuǎn)比虛擬機(jī)本身占用的資源少。

1-1缎谷、Docker和虛擬化的對比

虛擬化:

圖片.png

Docker:

圖片.png

Docker的優(yōu)勢在于可以直接使用主機(jī)操作系統(tǒng)的資源進(jìn)行虛擬化井濒,對主機(jī)資源的利用率比較高灶似。并且借助Docker和云計(jì)算技術(shù)可以簡化程序,實(shí)現(xiàn)快速部署瑞你,彈性使用資源等酪惭。

1-2、Docker架構(gòu)

Docker架構(gòu)如下圖:

圖片.png

相關(guān)概念:

  • Docker Daemon(Docker進(jìn)程):Docker進(jìn)程是部署在linux操作系統(tǒng)上者甲,負(fù)責(zé)支撐Docker Container的運(yùn)行以及本地Image的管理春感。

  • Docker Client:用戶不直接操作Docker daemon,用戶通過Docker Client訪問Docker虏缸,Docker Client提供pull鲫懒、run等操作命令。

  • Docker Image:Docker鏡像就是一個(gè)只讀的模板刽辙。例如:一個(gè)鏡像可以包含一個(gè)完整的 ubuntu 操作系統(tǒng)環(huán)境窥岩,里面僅安裝了 Apache 或用戶需要的其它應(yīng)用程序。
    鏡像可以用來創(chuàng)建 Docker 容器宰缤。Docker 提供了一個(gè)很簡單的機(jī)制來創(chuàng)建鏡像或者更新現(xiàn)有的鏡像颂翼,用戶甚至可以直接從其他人那里下載一個(gè)已經(jīng)做好的鏡像來直接使用。

  • Docker Container:Docker 利用容器來運(yùn)行應(yīng)用慨灭。容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例朦乏。它可以被啟動、開始氧骤、停止呻疹、刪除。每個(gè)容器都是相互隔離的筹陵、保證安全的平臺诲宇。可以把容器看做是一個(gè)簡易版的 Linux環(huán)境(包括root用戶權(quán)限惶翻、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序鹅心。

  • Docker Registry:倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式
    最大的公開倉庫是 Docker Hub吕粗,存放了數(shù)量龐大的鏡像供用戶下載。用戶也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)私有倉庫旭愧。當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫颅筋,這樣下次在另外一臺機(jī)器上使用這個(gè)鏡像時(shí)候,只需要從倉庫上 pull 下來就可以了输枯。

Docker使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式议泵,使用遠(yuǎn)程API來管理和創(chuàng)建Docker容器。Docker容器通過Docker鏡像來創(chuàng)建桃熄,這里容器與鏡像的關(guān)系類似于面向?qū)ο缶幊讨械膶ο笈c類的關(guān)系先口。

Docker簡單架構(gòu)圖如下:

圖片.png

二、Docker核心概念:鏡像

2-1、docker鏡像底層原理

  1. bootFS(boot file system)主要包括bootloader和kernel碉京,bootloader主要是引導(dǎo)加載kernel厢汹,內(nèi)核加載進(jìn)內(nèi)存后,系統(tǒng)會卸載bootFS節(jié)省內(nèi)存谐宙。

  2. rootFS(root file system)烫葬,位于bootFS之上,包含的是例如典型Linux中的/dev凡蜻,/proc搭综、/bin、/etc等標(biāo)準(zhǔn)目錄和文件划栓。

    • 在傳統(tǒng)模式中兑巾,系統(tǒng)啟動內(nèi)核掛載rootFS時(shí)會先將其掛載為只讀模式,等系統(tǒng)完成自檢后將其掛載為讀寫模式茅姜。
    • 但是在docker中闪朱,內(nèi)核掛載rootFS時(shí)只會將其掛載為只讀模式,而后通過UnionFS技術(shù)再掛載一個(gè)可寫層钻洒。

    對于一個(gè)精簡的OS奋姿,rootFS可以很小,只需包括最基本的命令素标、工具和程序庫即可称诗,然后直接使用宿主機(jī)的內(nèi)核,自己只需提供rootFS即可头遭。rootFS就是各種不同系統(tǒng)的發(fā)行版寓免,例如CentOS、Ubuntu等等计维。對于不同的Linux發(fā)行版袜香,bootFS基本是一致的,可以公用的鲫惶,rootFS會有差別蜈首。

  3. 聯(lián)合文件系統(tǒng)(UnionFS)是一種分層、輕量級并且高性能的文件系統(tǒng)欠母,可以將對文件系統(tǒng)的修改作為一次提交來一層一層的疊加欢策,并且可以將不同目錄掛載到同一虛擬文件系統(tǒng)下面。這樣一次同時(shí)加載多個(gè)文件系統(tǒng)赏淌,同時(shí)聯(lián)合加載機(jī)制會將各種文件系統(tǒng)疊加起來踩寇,這樣最終的文件系統(tǒng)會包括所有底層的文件和目錄。

2-2六水、docker鏡像加載原理

鏡像的基礎(chǔ)就是UnionFS俺孙。鏡像可以通過分層來進(jìn)行繼承辣卒,基于基礎(chǔ)鏡像,可以制作各種具體的應(yīng)用鏡像鼠冕。鏡像其實(shí)就是一堆只讀層(read-only layer)的統(tǒng)一視角添寺,如圖所示:

鏡像.png

從左邊我們看到了多個(gè)只讀層,它們重疊在一起懈费。除了最下面一層计露,其它層都會有一個(gè)指針指向下一層。這些層是Docker內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)憎乙,并且能夠在Docker宿主機(jī)的文件系統(tǒng)上訪問到票罐。UnionFS技術(shù)能夠?qū)⒉煌膶诱铣梢粋€(gè)文件系統(tǒng),為這些層提供了一個(gè)統(tǒng)一的視角泞边,這樣就隱藏了多層的存在该押,在用戶的角度看來,只存在一個(gè)文件系統(tǒng)阵谚。我們可以在圖片的右邊看到這個(gè)視角的形式蚕礼。

2-3、docker鏡像使用分層結(jié)構(gòu)的好處

鏡像采用分層結(jié)構(gòu)梢什,最大的好處就是可以共享資源奠蹬,例如多個(gè)鏡像都從相同的base鏡像構(gòu)建而來,那么宿主機(jī)的磁盤和內(nèi)存中嗡午,也只需加載一份base鏡像就可以為所有的容器服務(wù)囤躁,鏡像的每一層都是共享的。

三荔睹、Docker核心概念:容器

容器是從鏡像創(chuàng)建的應(yīng)用運(yùn)行實(shí)例狸演,容器之間是相互隔離、互不可見的僻他∠啵可以把容器看做一個(gè)簡易版的linux系統(tǒng)環(huán)境(包括root權(quán)限、進(jìn)程空間吨拗、用戶空間和網(wǎng)絡(luò)空間等)消玄,以及運(yùn)行在這個(gè)環(huán)境上的應(yīng)用打包而成的應(yīng)用盒子。鏡像自身是自讀的丢胚,容器從鏡像啟動的時(shí)候,docker會在鏡像的最上層創(chuàng)建一個(gè)可寫文件層受扳,鏡像本身保持不變携龟。

容器(container)的定義和鏡像(image)幾乎一模一樣,也是一堆層的統(tǒng)一視角勘高,唯一區(qū)別在于容器的最上面那一層是可讀可寫的峡蟋》匚Γ可以這樣理解,容器 = 鏡像 + 讀寫層蕊蝗。

容器.png

一個(gè)運(yùn)行態(tài)容器(running container)被定義為一個(gè)可讀寫的統(tǒng)一文件系統(tǒng)加上隔離的進(jìn)程空間和包含其中的進(jìn)程仅乓。下面這張圖片展示了一個(gè)運(yùn)行中的容器。

運(yùn)行態(tài)容器.png

一個(gè)容器中的進(jìn)程可能會對文件進(jìn)行修改蓬戚、刪除夸楣、創(chuàng)建,這些改變都將作用于可讀寫層(read-write layer)子漩。下面這張圖展示了這個(gè)行為豫喧。

容器中的進(jìn)程修改文件.png

四、Docker核心概念:倉庫

Docker倉庫(Repository)類似與代碼倉庫幢泼,是Docker集中存放鏡像文件的場所紧显。

有時(shí)候會看到有資料將Docker倉庫和注冊服務(wù)器(Registry)混為一談,并不嚴(yán)格區(qū)分缕棵。實(shí)際上孵班,注冊服務(wù)器是存放倉庫的地方,其上往往存放著多個(gè)倉庫招驴。每個(gè)倉庫集中存放某一類鏡像篙程,往往包括多個(gè)鏡像文件,通過不同的標(biāo)簽(tag)來進(jìn)行區(qū)分忽匈。例如存放Ubuntu操作系統(tǒng)鏡像的倉庫房午,稱為Ubuntu倉庫,其中可能包括14.04,12.04等不同版本的鏡像丹允。

根據(jù)存儲的鏡像公開分享與否郭厌,Docker倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。目前雕蔽,最大的公開倉庫是Docker Hub 折柠,存放了數(shù)量龐大的鏡像供用戶下載。國內(nèi)的阿里云既提供了加速功能批狐,也提供了倉庫功能扇售,也就是我們可以將自己的鏡像上傳到阿里云倉庫。如果用戶不希望公開分享自己的鏡像文件嚣艇,Docker也支持用戶在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)只能自己訪問的私有倉庫承冰。

當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用push將它上傳到指定的公有或則私有倉庫。這樣用戶下次在另一臺機(jī)器上使用該鏡像時(shí)食零,只需將其從倉庫pull下來就可以了困乒。

參考文章:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贰谣,隨后出現(xiàn)的幾起案子娜搂,更是在濱河造成了極大的恐慌迁霎,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件百宇,死亡現(xiàn)場離奇詭異考廉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)携御,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門昌粤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人因痛,你說我怎么就攤上這事婚苹。” “怎么了鸵膏?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵膊升,是天一觀的道長。 經(jīng)常有香客問我谭企,道長廓译,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任债查,我火速辦了婚禮非区,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盹廷。我一直安慰自己征绸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布俄占。 她就那樣靜靜地躺著管怠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缸榄。 梳的紋絲不亂的頭發(fā)上渤弛,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音甚带,去河邊找鬼她肯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鹰贵,可吹牛的內(nèi)容都是我干的晴氨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼碉输,長吁一口氣:“原來是場噩夢啊……” “哼籽前!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤聚假,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后闰非,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膘格,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年财松,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘪贱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辆毡,死狀恐怖菜秦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舶掖,我是刑警寧澤球昨,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站眨攘,受9級特大地震影響主慰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鲫售,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一共螺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧情竹,春花似錦藐不、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棉安,卻和暖如春底扳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贡耽。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工衷模, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒲赂。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓阱冶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親滥嘴。 傳聞我的和親對象是個(gè)殘疾皇子木蹬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容