Docker學(xué)習(xí)(四)-其他知識

上篇文章中我簡單介紹了如何使用Docker三劍客的知識,這篇文章我將簡單介紹下Docker涉及的一些其他知識抚笔,包括Docker的安全性機制扶认、Docker的底層原理實現(xiàn)等。

首先殊橙,簡單介紹下Docker的安全機制:

Docker的安全機制包含以下內(nèi)容:

Docker 容器和 LXC 容器很相似辐宾,所提供的安全特性也差不多。當(dāng)用 docker run 啟動一個容器時蛀柴,在后臺 Docker 為容器創(chuàng)建了一個獨立的命名空間和控制組集合螃概。命名空間提供了最基礎(chǔ)也是最直接的隔離,在容器中運行的進程不會被運行在主機上的進程和其它容器發(fā)現(xiàn)和作用鸽疾。

控制組是 Linux 容器機制的另外一個關(guān)鍵組件吊洼,負(fù)責(zé)實現(xiàn)資源的審計和限制。它提供了很多有用的特性制肮;以及確保各個容器可以公平地分享主機的內(nèi)存冒窍、CPU、磁盤 IO 等資源豺鼻;當(dāng)然综液,更重要的是,控制組確保了當(dāng)容器內(nèi)的資源使用產(chǎn)生壓力時不會連累主機系統(tǒng)儒飒。

運行一個容器或應(yīng)用程序的核心是通過 Docker 服務(wù)端谬莹。Docker 服務(wù)的運行目前需要 root 權(quán)限,因此其安全性十分關(guān)鍵桩了。

首先附帽,確保只有可信的用戶才可以訪問 Docker 服務(wù)。Docker 允許用戶在主機和容器間共享文件夾井誉,同時不需要限制容器的訪問權(quán)限蕉扮,這就容易讓容器突破資源限制。例如颗圣,惡意用戶啟動容器的時候?qū)⒅鳈C的根目錄/映射到容器的 /host 目錄中喳钟,那么容器理論上就可以對主機的文件系統(tǒng)進行任意修改了屁使。這聽起來很瘋狂?但是事實上幾乎所有虛擬化系統(tǒng)都允許類似的資源共享奔则,而沒法禁止用戶共享主機根文件系統(tǒng)到虛擬機系統(tǒng)蛮寂。

能力機制(Capability)是 Linux 內(nèi)核一個強大的特性,可以提供細(xì)粒度的權(quán)限訪問控制应狱。 Linux 內(nèi)核自 2.2 版本起就支持能力機制共郭,它將權(quán)限劃分為更加細(xì)粒度的操作能力,既可以作用在進程上疾呻,也可以作用在文件上除嘹。

例如,一個 Web 服務(wù)進程只需要綁定一個低于 1024 的端口的權(quán)限岸蜗,并不需要 root 權(quán)限尉咕。那么它只需要被授權(quán) net_bind_service 能力即可。此外璃岳,還有很多其他的類似能力來避免進程獲取 root 權(quán)限年缎。

其次,從基本架構(gòu)铃慷、命名空間单芜、控制組和聯(lián)合文件系統(tǒng)四個方面講一下Docker的底層技術(shù)實現(xiàn):

1、基本架構(gòu):

Docker 采用了 C/S 架構(gòu)犁柜,包括客戶端和服務(wù)端洲鸠。Docker 守護進程 (Daemon)作為服務(wù)端接受來自客戶端的請求,并處理這些請求(創(chuàng)建馋缅、運行扒腕、分發(fā)容器)。

客戶端和服務(wù)端既可以運行在一個機器上萤悴,也可通過 socket 或者 RESTful API 來進行通信瘾腰。

c/s架構(gòu)

Docker 守護進程一般在宿主主機后臺運行,等待接收來自客戶端的消息覆履。

Docker 客戶端則為用戶提供一系列可執(zhí)行命令蹋盆,用戶用這些命令實現(xiàn)跟 Docker 守護進程交互。

2硝全、命名空間:

命名空間是 Linux 內(nèi)核一個強大的特性怪嫌。每個容器都有自己單獨的命名空間,運行在其中的應(yīng)用都像是在獨立的操作系統(tǒng)中運行一樣柳沙。命名空間保證了容器之間彼此互不影響。

pid 命名空間

不同用戶的進程就是通過 pid 命名空間隔離開的拌倍,且不同命名空間中可以有相同 pid赂鲤。所有的 LXC 進程在 Docker 中的父進程為 Docker 進程噪径,每個 LXC 進程具有不同的命名空間。同時由于允許嵌套数初,因此可以很方便的實現(xiàn)嵌套的 Docker 容器找爱。

net 命名空間

有了 pid 命名空間,每個命名空間中的 pid 能夠相互隔離泡孩,但是網(wǎng)絡(luò)端口還是共享 host 的端口车摄。網(wǎng)絡(luò)隔離是通過 net 命名空間實現(xiàn)的, 每個 net 命名空間有獨立的 網(wǎng)絡(luò)設(shè)備仑鸥,IP 地址吮播,路由表,/proc/net 目錄眼俊。這樣每個容器的網(wǎng)絡(luò)就能隔離開來意狠。Docker 默認(rèn)采用 veth 的方式,將容器中的虛擬網(wǎng)卡同 host 上的一 個Docker 網(wǎng)橋 docker0 連接在一起疮胖。

ipc 命名空間

容器中進程交互還是采用了 Linux 常見的進程間交互方法(interprocess communication - IPC)环戈, 包括信號量、消息隊列和共享內(nèi)存等澎灸。然而同 VM 不同的是院塞,容器的進程間交互實際上還是 host 上具有相同 pid 命名空間中的進程間交互,因此需要在 IPC 資源申請時加入命名空間信息性昭,每個 IPC 資源有一個唯一的 32 位 id拦止。

mnt 命名空間

類似 chroot,將一個進程放到一個特定的目錄執(zhí)行巩梢。mnt 命名空間允許不同命名空間的進程看到的文件結(jié)構(gòu)不同创泄,這樣每個命名空間 中的進程所看到的文件目錄就被隔離開了。同 chroot 不同括蝠,每個命名空間中的容器在 /proc/mounts 的信息只包含所在命名空間的 mount point鞠抑。

uts 命名空間

UTS("UNIX Time-sharing System") 命名空間允許每個容器擁有獨立的 hostname 和 domain name, 使其在網(wǎng)絡(luò)上可以被視作一個獨立的節(jié)點而非 主機上的一個進程忌警。

user 命名空間

每個容器可以有不同的用戶和組 id搁拙, 也就是說可以在容器內(nèi)用容器內(nèi)部的用戶執(zhí)行程序而非主機上的用戶

3、控制組

控制組(cgroups)是 Linux 內(nèi)核的一個特性法绵,主要用來對共享資源進行隔離箕速、限制、審計等朋譬。只有能控制分配到容器的資源盐茎,才能避免當(dāng)多個容器同時運行時的對系統(tǒng)資源的競爭。

控制組技術(shù)最早是由 Google 的程序員在 2006 年提出徙赢,Linux 內(nèi)核自 2.6.24 開始支持字柠。

控制組可以提供對容器的內(nèi)存探越、CPU、磁盤 IO 等資源的限制和審計管理窑业。

4钦幔、聯(lián)合文件系統(tǒng)

聯(lián)合文件系統(tǒng)(UnionFS)是一種分層、輕量級并且高性能的文件系統(tǒng)常柄,它支持對文件系統(tǒng)的修改作為一次提交來一層層的疊加鲤氢,同時可以將不同目錄掛載到同一個虛擬文件系統(tǒng)下(unite several directories into a single virtual filesystem)。

聯(lián)合文件系統(tǒng)是 Docker 鏡像的基礎(chǔ)西潘。鏡像可以通過分層來進行繼承卷玉,基于基礎(chǔ)鏡像(沒有父鏡像),可以制作各種具體的應(yīng)用鏡像秸架。

另外揍庄,不同 Docker 容器就可以共享一些基礎(chǔ)的文件系統(tǒng)層,同時再加上自己獨有的改動層东抹,大大提高了存儲的效率蚂子。

Docker 中使用的 AUFS(AnotherUnionFS)就是一種聯(lián)合文件系統(tǒng)。 AUFS 支持為每一個成員目錄(類似 Git 的分支)設(shè)定只讀(readonly)缭黔、讀寫(readwrite)和寫出(whiteout-able)權(quán)限, 同時 AUFS 里有一個類似分層的概念, 對只讀權(quán)限的分支可以邏輯上進行增量地修改(不影響只讀部分的)食茎。

Docker 目前支持的聯(lián)合文件系統(tǒng)包括 OverlayFS, AUFS, Btrfs, VFS, ZFS 和 Device Mapper。

各 Linux 發(fā)行版 Docker 推薦使用的存儲驅(qū)動如下


Docker 推薦使用的存儲驅(qū)動

參考文章:Docker底層實現(xiàn)馏谨、這可能是最為詳細(xì)的Docker入門吐血總結(jié)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末别渔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惧互,更是在濱河造成了極大的恐慌哎媚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喊儡,死亡現(xiàn)場離奇詭異拨与,居然都是意外死亡,警方通過查閱死者的電腦和手機艾猜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門买喧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匆赃,你說我怎么就攤上這事淤毛。” “怎么了算柳?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵低淡,是天一觀的道長。 經(jīng)常有香客問我,道長查牌,這世上最難降的妖魔是什么事期? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮纸颜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绎橘。我一直安慰自己胁孙,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布称鳞。 她就那樣靜靜地躺著涮较,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冈止。 梳的紋絲不亂的頭發(fā)上狂票,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音熙暴,去河邊找鬼闺属。 笑死,一個胖子當(dāng)著我的面吹牛周霉,可吹牛的內(nèi)容都是我干的掂器。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俱箱,長吁一口氣:“原來是場噩夢啊……” “哼国瓮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狞谱,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤乃摹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后跟衅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孵睬,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年与斤,在試婚紗的時候發(fā)現(xiàn)自己被綠了肪康。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡撩穿,死狀恐怖磷支,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情食寡,我是刑警寧澤雾狈,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站抵皱,受9級特大地震影響善榛,放射性物質(zhì)發(fā)生泄漏辩蛋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一移盆、第九天 我趴在偏房一處隱蔽的房頂上張望悼院。 院中可真熱鬧,春花似錦咒循、人聲如沸据途。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颖医。三九已至,卻和暖如春裆蒸,著一層夾襖步出監(jiān)牢的瞬間熔萧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工僚祷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留佛致,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓久妆,卻偏偏與公主長得像晌杰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子筷弦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

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