自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 架構(gòu)
簡(jiǎn)單介紹下docker的技術(shù)架構(gòu)及其中組成的各個(gè)模塊。

 [[316624]]

概述

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

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

 

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

 

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

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

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

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

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

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

1、docker client

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

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

2、docker daemon

docker daemon 是docker架構(gòu)中一個(gè)常駐在后臺(tái)的系統(tǒng)進(jìn)程,功能是:接收處理docker client發(fā)送的請(qǐng)求。該守護(hù)進(jìn)程在后臺(tái)啟動(dòng)一個(gè)server,server負(fù)載接受docker client發(fā)送的請(qǐng)求;接受請(qǐng)求后,server通過(guò)路由與分發(fā)調(diào)度,找到相應(yīng)的handler來(lái)執(zhí)行請(qǐng)求。

docker daemon啟動(dòng)所使用的可執(zhí)行文件也為docker,與docker client啟動(dòng)所使用的可執(zhí)行文件docker相同,在docker命令執(zhí)行時(shí),通過(guò)傳入的參數(shù)來(lái)判別docker daemon與docker client。

3、docker server

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

 

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

 

在Docker的啟動(dòng)過(guò)程中,通過(guò)包gorilla/mux(golang的類庫(kù)解析),創(chuàng)建了一個(gè)mux.Router,提供請(qǐng)求的路由功能。在Golang中,gorilla/mux是一個(gè)強(qiáng)大的URL路由器以及調(diào)度分發(fā)器。該mux.Router中添加了眾多的路由項(xiàng),每一個(gè)路由項(xiàng)由HTTP請(qǐng)求方法(PUT、POST、GET或DELETE)、URL、Handler三部分組成。

4、engine

Engine是Docker架構(gòu)中的運(yùn)行引擎,同時(shí)也Docker運(yùn)行的核心模塊。它扮演Docker container存儲(chǔ)倉(cāng)庫(kù)的角色,并且通過(guò)執(zhí)行job的方式來(lái)操縱管理這些容器。

在Engine數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程中,有一個(gè)handler對(duì)象。該handler對(duì)象存儲(chǔ)的都是關(guān)于眾多特定job的handler處理訪問(wèn)。舉例說(shuō)明,Engine的handler對(duì)象中有一項(xiàng)為:{“create”: daemon.ContainerCreate,},則說(shuō)明當(dāng)名為”create”的job在運(yùn)行時(shí),執(zhí)行的是daemon.ContainerCreate的handler。

5、job

一個(gè)Job可以認(rèn)為是Docker架構(gòu)中Engine內(nèi)部最基本的工作執(zhí)行單元。Docker可以做的每一項(xiàng)工作,都可以抽象為一個(gè)job。例如:在容器內(nèi)部運(yùn)行一個(gè)進(jìn)程,這是一個(gè)job;創(chuàng)建一個(gè)新的容器,這是一個(gè)job,從Internet上下載一個(gè)文檔,這是一個(gè)job;包括之前在Docker Server部分說(shuō)過(guò)的,創(chuàng)建Server服務(wù)于HTTP的API,這也是一個(gè)job,等等。

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

6、docker registry

Docker Registry是一個(gè)存儲(chǔ)容器鏡像的倉(cāng)庫(kù)。而容器鏡像是在容器被創(chuàng)建時(shí),被加載用來(lái)初始化容器的文件架構(gòu)與目錄。

在Docker的運(yùn)行過(guò)程中,Docker Daemon會(huì)與Docker Registry通信,并實(shí)現(xiàn)搜索鏡像、下載鏡像、上傳鏡像三個(gè)功能,這三個(gè)功能對(duì)應(yīng)的job名稱分別為”search”,”pull” 與 “push”。

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

7、Graph

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

 

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

 

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

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

8、driver

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

9、libcontainer

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

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

 

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

 

另外,libcontainer提供了一整套標(biāo)準(zhǔn)的接口來(lái)滿足上層對(duì)容器管理的需求。或者說(shuō),libcontainer屏蔽了Docker上層對(duì)容器的直接管理。又由于libcontainer使用Go這種跨平臺(tái)的語(yǔ)言開發(fā)實(shí)現(xiàn),且本身又可以被上層多種不同的編程語(yǔ)言訪問(wèn),因此很難說(shuō),未來(lái)的Docker就一定會(huì)緊緊地和Linux捆綁在一起。而于此同時(shí),Microsoft在其著名云計(jì)算平臺(tái)Azure中,也添加了對(duì)Docker的支持,可見Docker的開放程度與業(yè)界的火熱度。

10、docker container

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

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

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

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2019-09-29 08:32:08

Docker容器模塊

2020-01-10 09:44:30

Docker容器模塊

2023-12-18 10:45:31

2025-01-09 11:14:14

2019-02-13 15:38:09

存儲(chǔ)虛擬化云計(jì)算

2020-03-31 14:40:24

HashMap源碼Java

2019-07-09 10:14:04

云計(jì)算行業(yè)科技

2019-07-11 11:39:31

云計(jì)算操作系統(tǒng)IaaS

2016-08-18 00:21:12

網(wǎng)絡(luò)爬蟲抓取網(wǎng)絡(luò)

2024-08-12 12:30:27

2023-07-14 08:00:00

ORMRust ORMSQL

2017-01-09 15:55:42

eMTC物聯(lián)網(wǎng)無(wú)線連接

2019-07-05 13:19:43

技術(shù)團(tuán)隊(duì)組建績(jī)效考核

2025-01-20 09:15:00

iOS 18.3蘋果iOS 18

2021-08-02 06:56:19

TypeScript編程語(yǔ)言編譯器

2019-07-01 09:22:15

Linux操作系統(tǒng)硬件

2019-05-22 09:50:42

Python沙箱逃逸網(wǎng)絡(luò)攻擊

2021-08-05 15:12:30

Anolis OS 國(guó)密生態(tài)國(guó)產(chǎn)化

2022-08-18 17:21:51

人臉識(shí)別

2019-03-19 16:15:10

區(qū)塊鏈架構(gòu)設(shè)計(jì)編程語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)