一文看懂docker容器技術架構(gòu)及其中的各個模塊

概述

今天主要簡單介紹下docker的技術架構(gòu)及其中組成的各個模塊。

技術架構(gòu)

distribution 負責與docker registry交互沈贝,上傳洗澡鏡像以及v2 registry 有關的源數(shù)據(jù)

registry負責docker registry有關的身份認證澳腹、鏡像查找江锨、鏡像驗證以及管理registry mirror等交互操作瞬矩。

image 負責與鏡像源數(shù)據(jù)有關的存儲、查找,鏡像層的索引灭返、查找以及鏡像tar包有關的導入、導出操作坤邪。

reference負責存儲本地所有鏡像的repository和tag名熙含,并維護與鏡像id之間的映射關系。

layer模塊負責與鏡像層和容器層源數(shù)據(jù)有關的增刪改查艇纺,并負責將鏡像層的增刪改查映射到實際存儲鏡像層文件的graphdriver模塊怎静。

graghdriver是所有與容器鏡像相關操作的執(zhí)行者。

1黔衡、docker client

docker client 是docker架構(gòu)中用戶用來和docker daemon建立通信的客戶端蚓聘,用戶使用的可執(zhí)行文件為docker,通過docker命令行工具可以發(fā)起眾多管理container的請求盟劫。

docker client發(fā)送容器管理請求后夜牡,由docker daemon接受并處理請求,當docker client 接收到返回的請求相應并簡單處理后侣签,docker client 一次完整的生命周期就結(jié)束了塘装,當需要繼續(xù)發(fā)送容器管理請求時,用戶必須再次通過docker可以執(zhí)行文件創(chuàng)建docker client影所。

2蹦肴、docker daemon

docker daemon 是docker架構(gòu)中一個常駐在后臺的系統(tǒng)進程,功能是:接收處理docker client發(fā)送的請求猴娩。該守護進程在后臺啟動一個server阴幌,server負載接受docker client發(fā)送的請求;接受請求后,server通過路由與分發(fā)調(diào)度卷中,找到相應的handler來執(zhí)行請求矛双。

docker daemon啟動所使用的可執(zhí)行文件也為docker,與docker client啟動所使用的可執(zhí)行文件docker相同仓坞,在docker命令執(zhí)行時背零,通過傳入的參數(shù)來判別docker daemon與docker client。

3无埃、docker server

docker server在docker架構(gòu)中時專門服務于docker client的server徙瓶,該server的功能時:接受并調(diào)度分發(fā)docker client發(fā)送的請求,架構(gòu)圖如下:

在Docker的啟動過程中嫉称,通過包gorilla/mux(golang的類庫解析)侦镇,創(chuàng)建了一個mux.Router,提供請求的路由功能织阅。在Golang中壳繁,gorilla/mux是一個強大的URL路由器以及調(diào)度分發(fā)器。該mux.Router中添加了眾多的路由項,每一個路由項由HTTP請求方法(PUT闹炉、POST蒿赢、GET或DELETE)、URL渣触、Handler三部分組成羡棵。

4、engine

Engine是Docker架構(gòu)中的運行引擎嗅钻,同時也Docker運行的核心模塊皂冰。它扮演Docker container存儲倉庫的角色,并且通過執(zhí)行job的方式來操縱管理這些容器养篓。

在Engine數(shù)據(jù)結(jié)構(gòu)的設計與實現(xiàn)過程中秃流,有一個handler對象。該handler對象存儲的都是關于眾多特定job的handler處理訪問柳弄。舉例說明舶胀,Engine的handler對象中有一項為:{“create”: daemon.ContainerCreate,},則說明當名為”create”的job在運行時语御,執(zhí)行的是daemon.ContainerCreate的handler峻贮。

5、job

一個Job可以認為是Docker架構(gòu)中Engine內(nèi)部最基本的工作執(zhí)行單元应闯。Docker可以做的每一項工作纤控,都可以抽象為一個job。例如:在容器內(nèi)部運行一個進程碉纺,這是一個job;創(chuàng)建一個新的容器船万,這是一個job,從Internet上下載一個文檔骨田,這是一個job;包括之前在Docker Server部分說過的耿导,創(chuàng)建Server服務于HTTP的API,這也是一個job态贤,等等舱呻。

Job的設計者,把Job設計得與Unix進程相仿悠汽。比如說:Job有一個名稱箱吕,有參數(shù),有環(huán)境變量柿冲,有標準的輸入輸出茬高,有錯誤處理,有返回狀態(tài)等假抄。

6怎栽、docker registry

Docker Registry是一個存儲容器鏡像的倉庫丽猬。而容器鏡像是在容器被創(chuàng)建時,被加載用來初始化容器的文件架構(gòu)與目錄熏瞄。

在Docker的運行過程中脚祟,Docker Daemon會與Docker Registry通信,并實現(xiàn)搜索鏡像强饮、下載鏡像愚铡、上傳鏡像三個功能,這三個功能對應的job名稱分別為”search”胡陪,”pull” 與 “push”。

其中碍舍,在Docker架構(gòu)中柠座,Docker可以使用公有的Docker Registry,即大家熟知的Docker Hub片橡,如此一來妈经,Docker獲取容器鏡像文件時,必須通過互聯(lián)網(wǎng)訪問Docker Hub;同時Docker也允許用戶構(gòu)建本地私有的Docker Registry捧书,這樣可以保證容器鏡像的獲取在內(nèi)網(wǎng)完成吹泡。

7、Graph

Graph在Docker架構(gòu)中扮演已下載容器鏡像的保管者经瓷,以及已下載容器鏡像之間關系的記錄者爆哑。一方面,Graph存儲著本地具有版本信息的文件系統(tǒng)鏡像舆吮,另一方面也通過GraphDB記錄著所有文件系統(tǒng)鏡像彼此之間的關系揭朝。Graph的架構(gòu)如下:

其中,GraphDB是一個構(gòu)建在SQLite之上的小型圖數(shù)據(jù)庫色冀,實現(xiàn)了節(jié)點的命名以及節(jié)點之間關聯(lián)關系的記錄潭袱。它僅僅實現(xiàn)了大多數(shù)圖數(shù)據(jù)庫所擁有的一個小的子集,但是提供了簡單的接口表示節(jié)點之間的關系锋恬。

同時在Graph的本地目錄中屯换,關于每一個的容器鏡像,具體存儲的信息有:該容器鏡像的元數(shù)據(jù)与学,容器鏡像的大小信息彤悔,以及該容器鏡像所代表的具體rootfs。

8癣防、driver

Driver是Docker架構(gòu)中的驅(qū)動模塊蜗巧。通過Driver驅(qū)動,Docker可以實現(xiàn)對Docker容器執(zhí)行環(huán)境的定制蕾盯。由于Docker運行的生命周期中幕屹,并非用戶所有的操作都是針對Docker容器的管理蓝丙,另外還有關于Docker運行信息的獲取,Graph的存儲與記錄等望拖。因此渺尘,為了將Docker容器的管理從Docker Daemon內(nèi)部業(yè)務邏輯中區(qū)分開來,設計了Driver層驅(qū)動來接管所有這部分請求说敏。

9鸥跟、libcontainer

libcontainer是Docker架構(gòu)中一個使用Go語言設計實現(xiàn)的庫,設計初衷是希望該庫可以不依靠任何依賴盔沫,直接訪問內(nèi)核中與容器相關的API医咨。

正是由于libcontainer的存在,Docker可以直接調(diào)用libcontainer架诞,而最終操縱容器的namespace拟淮、cgroups谴忧、apparmor沾谓、網(wǎng)絡設備以及防火墻規(guī)則等均驶。這一系列操作的完成都不需要依賴LXC或者其他包妇穴。libcontainer架構(gòu)如下:

另外饮潦,libcontainer提供了一整套標準的接口來滿足上層對容器管理的需求继蜡∠〔ⅲ或者說碘举,libcontainer屏蔽了Docker上層對容器的直接管理耕皮。又由于libcontainer使用Go這種跨平臺的語言開發(fā)實現(xiàn)凌停,且本身又可以被上層多種不同的編程語言訪問罚拟,因此很難說,未來的Docker就一定會緊緊地和Linux捆綁在一起秃励。而于此同時,Microsoft在其著名云計算平臺Azure中,也添加了對Docker的支持珊拼,可見Docker的開放程度與業(yè)界的火熱度澎现。

10剑辫、docker container

Docker container(Docker容器)是Docker架構(gòu)中服務交付的最終體現(xiàn)形式妹蔽。

Docker按照用戶的需求與指令,訂制相應的Docker容器:

用戶通過指定容器鏡像乳丰,使得Docker容器可以自定義rootfs等文件系統(tǒng); 用戶通過指定計算資源的配額内贮,使得Docker容器使用指定的計算資源; 用戶通過配置網(wǎng)絡及其安全策略淆两,使得Docker容器擁有獨立且安全的網(wǎng)絡環(huán)境; 用戶通過指定運行的命令秋冰,使得Docker容器執(zhí)行指定的工作剑勾。

最后虽另,小編分類整理了許多java進階學習材料和BAT面試給熱愛IT行業(yè)的你谣拣,如果需要資料的請轉(zhuǎn)發(fā)此文章后再私聊小編回復【java】就能領取2019年java進階學習資料和BAT面試題以及《Effective Java》(第3版)電子版書籍。也可以加群:712263501領取海量學習資料進行學

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宾茂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌片林,老刑警劉巖爱谁,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爷抓,死亡現(xiàn)場離奇詭異蓝撇,居然都是意外死亡,警方通過查閱死者的電腦和手機陈莽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門渤昌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人走搁,你說我怎么就攤上這事独柑。” “怎么了私植?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵忌栅,是天一觀的道長。 經(jīng)常有香客問我曲稼,道長索绪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任贫悄,我火速辦了婚禮瑞驱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘清女。我一直安慰自己,他們只是感情好晰筛,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布嫡丙。 她就那樣靜靜地躺著,像睡著了一般读第。 火紅的嫁衣襯著肌膚如雪曙博。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天怜瞒,我揣著相機與錄音父泳,去河邊找鬼。 笑死吴汪,一個胖子當著我的面吹牛惠窄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漾橙,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼杆融,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了霜运?” 一聲冷哼從身側(cè)響起脾歇,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蒋腮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后藕各,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體池摧,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年激况,在試婚紗的時候發(fā)現(xiàn)自己被綠了作彤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡誉碴,死狀恐怖宦棺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情黔帕,我是刑警寧澤代咸,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站成黄,受9級特大地震影響呐芥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奋岁,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一思瘟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闻伶,春花似錦滨攻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至畜份,卻和暖如春诞帐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爆雹。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工停蕉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钙态。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓慧起,卻偏偏與公主長得像,于是被迫代替她去往敵國和親册倒。 傳聞我的和親對象是個殘疾皇子完慧,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

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

  • 是宿主機的一個進程,docker是通過namespace實現(xiàn)資源隔離,通過cgroup實現(xiàn)資源限制屈尼,通過寫時復制技...
    蘊重Liu閱讀 1,407評論 0 1
  • 轉(zhuǎn)載:[Docker] Docker整體架構(gòu)圖 一册着、Docker的總架構(gòu)圖 docker是一個C/S模式的架構(gòu),后...
    meng_philip123閱讀 1,411評論 0 2
  • Docker三大核心部件 Docker Image (鏡像)用來創(chuàng)建容器的模版脾歧,類似于OOP的類甲捏,鏡像是只讀的。 ...
    一攬瘋?cè)A閱讀 606評論 0 0
  • Docker背景: Docker借助操作系統(tǒng)層的虛擬化實現(xiàn)資源的隔離鞭执,因此Docker容器在運行時與虛擬機(VM)...
    ItStar閱讀 760評論 0 0
  • 今天看了一部英國紀錄片《植物王國》 這是生命的伊始兄纺,走近植物的生活大溜,感受她們的智慧。 一株美麗的肉食植物——茅膏菜...
    素瓷雜談閱讀 190評論 0 2