日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

一文看懂docker容器技术架构及其中的各个模块

發(fā)布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一文看懂docker容器技术架构及其中的各个模块 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


概述

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

技術(shù)架構(gòu)

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

registry負責(zé)docker registry有關(guān)的身份認證、鏡像查找、鏡像驗證以及管理registry mirror等交互操作。

image 負責(zé)與鏡像源數(shù)據(jù)有關(guān)的存儲、查找,鏡像層的索引、查找以及鏡像tar包有關(guān)的導(dǎo)入、導(dǎo)出操作。

reference負責(zé)存儲本地所有鏡像的repository和tag名,并維護與鏡像id之間的映射關(guān)系。

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

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

1、docker client

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

docker client發(fā)送容器管理請求后,由docker daemon接受并處理請求,當docker client 接收到返回的請求相應(yīng)并簡單處理后,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)度,找到相應(yīng)的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)中時專門服務(wù)于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)的設(shè)計與實現(xiàn)過程中,有一個handler對象。該handler對象存儲的都是關(guān)于眾多特定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服務(wù)于HTTP的API,這也是一個job,等等。

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

6、docker registry

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

在Docker的運行過程中,Docker Daemon會與Docker Registry通信,并實現(xiàn)搜索鏡像、下載鏡像、上傳鏡像三個功能,這三個功能對應(yīng)的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)中扮演已下載容器鏡像的保管者,以及已下載容器鏡像之間關(guān)系的記錄者。一方面,Graph存儲著本地具有版本信息的文件系統(tǒng)鏡像,另一方面也通過GraphDB記錄著所有文件系統(tǒng)鏡像彼此之間的關(guān)系。Graph的架構(gòu)如下:

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

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

8、driver

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

9、libcontainer

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

正是由于libcontainer的存在,Docker可以直接調(diào)用libcontainer,而最終操縱容器的namespace、cgroups、apparmor、網(wǎng)絡(luò)設(shè)備以及防火墻規(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)中服務(wù)交付的最終體現(xiàn)形式。

Docker按照用戶的需求與指令,訂制相應(yīng)的Docker容器:

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

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

總結(jié)

以上是生活随笔為你收集整理的一文看懂docker容器技术架构及其中的各个模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。