第一篇 : Docker 的基本概念和框架

一钦奋、Docker簡介

什么是容器 窥淆?

  • 一種虛擬化的方案
  • 操作系統(tǒng)級別的虛擬化
  • 只能運行相同或相似的內(nèi)核操作系統(tǒng)
  • 依賴于Linux內(nèi)核特性:Namespace和Cgroups(Control Group)

容器技術有哪些優(yōu)點 放吩?

從圖中我們很容器看出,容器技術資源占用比較少赞别,由于虛擬機需要模擬硬件的行為滤馍,對CUP和內(nèi)存的損耗比較大岛琼。所以同樣配置的服務器,容器技術就有以下優(yōu)點:

  • 資源占用比較少
  • CPU/內(nèi)存消耗低

那既然容器有這些優(yōu)點巢株,為什么直到Docker的出現(xiàn)槐瑞,才真正的被關注呢?一個重要原因就是容器技術的復雜性阁苞。容器本身就很復雜困檩,他依賴于Linux內(nèi)核的很多特性,而且他不易安裝那槽,也不易于管理和實現(xiàn)自動化悼沿。而Docker就是為了改變這一切而產(chǎn)生的。

什么是Docker 骚灸?

  • 將應用自動部署到容器的開源引擎
  • Go語言實現(xiàn)的開源項目显沈,誕生于2013年初,最初發(fā)起者是dotCloud公司

Docker的特點

  • 提供簡單輕量的建模方式:簡單逢唤,Docker非常容器上手拉讯,用戶只需要幾分鐘,就能把自己的項目Docker化鳖藕。
  • 職責的邏輯分離:使用Docker魔慷,開發(fā)人員只需要關心容器中運行的程序,運維人員只需要關心如何管理容器著恩;Docker設計的目的就是加強開發(fā)人員寫代碼的環(huán)境與應用程序要部署的生成環(huán)境的一致性院尔。
  • 快速高效的開發(fā)生命周期:Docker的目標之一是縮短代碼開發(fā)到測試到部署上線的運行周期,讓應用程序具備可移植性喉誊,在容器中開發(fā)邀摆,以容器的形式交付和分發(fā),這樣開發(fā)伍茄、測試栋盹、生產(chǎn),都使用相同的環(huán)境敷矫,這樣也就避免了額外的調(diào)試和部署上的開銷例获,這樣就能有效的縮短產(chǎn)品的上線周期汉额。
  • 鼓勵使用面向服務的架構:Docker推薦單個容器只運行一個應用程序或者進程,這樣就形成了一個分布式的應用程序模型榨汤,在這種模式下應用程序或服務都可以表述為一系列內(nèi)部互聯(lián)的容器蠕搜,從而使分布式部署應用程序擴展或調(diào)試都變得非常簡單。這就像我們開發(fā)中常用的思想收壕;高內(nèi)聚妓灌,低耦合,單一任務蜜宪。這樣就能避免在同一服務器上部署不同服務時虫埂,可能帶來的服務之間相互影響。這樣服務運行中出現(xiàn)問題時端壳,也比較容易定位問題的所在告丢。

Docker的使用場景

    1. 使用Docker容器開發(fā)、測試损谦、部署服務:因為Docker本身非常輕量化岖免,所以本地開發(fā)人員可以構建、運行并分享Docker容器照捡。容器可以在開發(fā)環(huán)境中創(chuàng)建颅湘,然后再提交到測試,最終進入生產(chǎn)環(huán)境栗精。
    1. 創(chuàng)建隔離的運行環(huán)境:在很多企業(yè)應用中闯参,同一服務的不同版本可能服務于不同的用戶,那么使用Docker非常容易創(chuàng)建不同的生成環(huán)境來運行不同的服務悲立。
    1. 搭建測試環(huán)境:由于Docker的輕量化鹿寨,所以開發(fā)者很容易利用Docker在本地搭建測試環(huán)境,用來測試程序在不用系統(tǒng)下的兼容性薪夕;甚至搭建集群的部署測試脚草。
    1. 構建多用戶的平臺即服務(PaaS)基礎設施
    1. 提供軟件即服務(SaaS)應用程序原献。
    1. 高性能馏慨、超大規(guī)模的宿主機部署

二姑隅、Docker的基本組成

Docker 包含了一下幾個重要主要部分:

  • Docker Client 客戶端
  • Docker Daemon 守護進程
  • Docker Image 鏡像
  • Docker Container 容器
  • Docker Registry 倉庫

Docker 客戶端 / 守護進程

  • Docker是C/S架構的程序:Docker客戶端向Docker服務器端写隶,也就是Docker的守護進程發(fā)出請求,守護進程處理完所有的請求工作并返回結果讲仰。
  • Docker 客戶端對服務器端的訪問既可以是本地也可以通過遠程來訪問慕趴。

Docker Image 鏡像

  • 鏡像是Docker容器的基石,容器基于鏡像啟動和運行。鏡像就好比容器的源代碼秩贰,保存了用于啟動容器的各種條件霹俺。
  • Docker鏡像是一個層疊的只讀文件系統(tǒng)柔吼。
  • Docker鏡像使用聯(lián)合加載技術

docker的鏡像是一個層疊的只讀文件系統(tǒng)毒费,最低端是一個引導文件系統(tǒng)(即bootfs),第二層是root文件系統(tǒng)(即rootfs)愈魏,它位于bootfs之上觅玻,可以是一種或多種操作系統(tǒng),比如ubuntu或者centos培漏。在docker中溪厘,root文件系統(tǒng)永遠只能是只讀狀態(tài),并且docker運用聯(lián)合加載技術又會在root文件系統(tǒng)之上加載更多的只讀文件系統(tǒng)牌柄,聯(lián)合加載指的是一次加載多個文件系統(tǒng)畸悬,但是在外面看起來只能看到一個文件系統(tǒng),聯(lián)合加載會將各層文件系統(tǒng)疊加到一起珊佣,這樣最終的文件系統(tǒng)會包含所有的底層文件和目錄蹋宦,docker將這樣的文件系統(tǒng)稱為鏡像。


Docker Container 容器

  • 容器通過鏡像來啟動咒锻,Docker的容器是Docker的執(zhí)行來源冷冗,容器中可以運行客戶的一個或多個進程,如果說鏡像是Docker聲明周期中的構建和打包階段惑艇,那么容器則是啟動和執(zhí)行階段蒿辙。

當一個容器啟動時,docker會在該鏡像的最頂層加載一個讀寫文件系統(tǒng)滨巴,也就是一個可寫的文件層思灌,我們在docker運行的程序,就是在這個層中進行執(zhí)行的恭取,當docker第一次啟動一個容器時泰偿,初始的讀寫層是空的,當文件系統(tǒng)發(fā)生變化時秽荤,這些變化都會應用到這一層上甜奄,比如像修改一個文件,該文件首先會從讀寫層下面的只讀層復制到該讀寫層窃款,該文件的只讀版本依然存在课兄,但是已經(jīng)被讀寫層中的該文件副本所隱藏,這就是docker的一個重要技術:寫時復制(copy on write)晨继。每個只讀鏡像層都是只讀的烟阐,永遠不會變化,當創(chuàng)建一個新容器時,docker會構建出一個鏡像棧蜒茄,如下圖所示:


Docker Registry 倉庫

  • docker用倉庫來保存用戶構建的鏡像唉擂,倉庫分為公有和私有兩種,Docker公司提供了一個公有的倉庫Docker Hub。

三檀葛、Docker 依賴的 Linux內(nèi)核特性

Docker依賴于Linux內(nèi)核的兩個重要特性:

  • Namespaces 命名空間
  • Control groups (cgroups) 控制組

Namespaces 命名空間

很多編程語言都包含了“命名空間”的概念玩祟,我們可以認為“命名空間”是一種“封裝”的概念, 而“封裝”本身實際上實現(xiàn)的是代碼的隔離屿聋。而在操作系統(tǒng)中空扎,命名空間提供的是系統(tǒng)資源的隔離,而系統(tǒng)資源包括了進程润讥、網(wǎng)絡转锈、文件系統(tǒng)等。

我們從Docker公開的文檔來看楚殿,它使用了5種命名空間:

  • PID(Process ID) 進程隔離
  • NET(Network)管理網(wǎng)絡接口
  • IPC(InterProcess Communication)管理跨進程通信的訪問
  • MNT(Mount)管理掛載點
  • UTS(Unix Timesharing System) 隔離內(nèi)核和版本標識

那么撮慨,這些隔離的資源,是如何被管理起來的呢脆粥?這就需要用到——Control groups(cgroup)控制組了砌溺。

Control groups (cgroups) 控制組

Control groups是Linux內(nèi)核提供的,一種可以限制冠绢、記錄抚吠、隔離進程組所使用的物理資源的機制。
最初是由google工程師提出弟胀,并且在2007年時被Linux的內(nèi)核的2.6.24版本引進楷力。可以說孵户,Control groups就是為容器而生的萧朝,沒有Control groups就沒有容器技術的今天。

Control groups提供了以下功能:

  • 資源限制:例如夏哭,memory(內(nèi)存)子系統(tǒng)可以為進程組設定一個內(nèi)存使用的上限检柬,一旦進程組使用的內(nèi)存達到了限額,該進程組再發(fā)出內(nèi)存申請時竖配,就會發(fā)出“out of memory”(內(nèi)存溢出)的警告何址。

  • 優(yōu)先級設定:它可以設定哪些進程組可以使用更大的CPU或者磁盤IO的資源。

  • 資源計量:它可以計算進程組使用了多少系統(tǒng)資源进胯。尤其是在計費系統(tǒng)中用爪,這一點十分重要。

  • 資源控制:它可以將進程組掛起或恢復胁镐。

Namespace 和 cgroup帶給Docker的能力

到這里我們了解了Namespace和CGroup的概念和職能偎血,而這兩個特性帶給了Docker哪些能力呢诸衔?如下:

  • 文件系統(tǒng)隔離:首先是文件系統(tǒng)的隔離,每個Docker的容器颇玷,都可以擁有自己的root文件系統(tǒng)笨农。

  • 進程隔離:每個容器都運行在自己的進程環(huán)境中。

  • 網(wǎng)絡隔離:容器間的虛擬網(wǎng)絡接口和IP地址都是分開的帖渠。

  • 資源的隔離和分組:使用cgroups將cpu和內(nèi)存之類的資源獨立分配給每個Docker容器谒亦。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市阿弃,隨后出現(xiàn)的幾起案子诊霹,更是在濱河造成了極大的恐慌羞延,老刑警劉巖渣淳,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伴箩,居然都是意外死亡入愧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門嗤谚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棺蛛,“玉大人,你說我怎么就攤上這事巩步∨陨蓿” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵椅野,是天一觀的道長终畅。 經(jīng)常有香客問我,道長竟闪,這世上最難降的妖魔是什么离福? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮炼蛤,結果婚禮上妖爷,老公的妹妹穿的比我還像新娘。我一直安慰自己理朋,他們只是感情好絮识,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗽上,像睡著了一般次舌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炸裆,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天垃它,我揣著相機與錄音,去河邊找鬼。 笑死国拇,一個胖子當著我的面吹牛洛史,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酱吝,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼也殖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了务热?” 一聲冷哼從身側(cè)響起忆嗜,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崎岂,沒想到半個月后捆毫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡冲甘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年绩卤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片江醇。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡濒憋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陶夜,到底是詐尸還是另有隱情凛驮,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布条辟,位于F島的核電站黔夭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捂贿。R本人自食惡果不足惜纠修,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厂僧。 院中可真熱鬧扣草,春花似錦、人聲如沸颜屠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甫窟。三九已至密浑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粗井,已是汗流浹背尔破。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工街图, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懒构。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓餐济,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胆剧。 傳聞我的和親對象是個殘疾皇子絮姆,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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