Docker的运行机制
Docker Engine(Docker引擎)是Docker的核心部分,使用的是客戶端-服務(wù)器(C/S)架構(gòu)模式,其主要組成部分如圖1所示。
圖1 Docker引擎
從圖6-8可以看出,Docker Engine中包含了三個(gè)核心組件(docker CLI、REST API和docker daemon),這三個(gè)組件的具體說明如下。
● docker CLI(command line interface):表示Docker命令行接口,開發(fā)者可以在命令行中使用Docker相關(guān)指令與Docker守護(hù)進(jìn)程進(jìn)行交互,從而管理諸如image(鏡像)、container(容器)、network(網(wǎng)絡(luò))和data volumes(數(shù)據(jù)卷)等實(shí)體。
● REST API:表示應(yīng)用程序API接口,開發(fā)者通過該API接口可以與Docker的守護(hù)進(jìn)程進(jìn)行交互,從而指示后臺(tái)進(jìn)行相關(guān)操作。
● docker daemon:表示Docker的服務(wù)端組件,他是Docker架構(gòu)中運(yùn)行在后臺(tái)的一個(gè)守護(hù)進(jìn)程,可以接收并處理來自命令行接口及API接口的指令,然后進(jìn)行相應(yīng)的后臺(tái)操作。
? 對(duì)于開發(fā)者而言,既可以使用編寫好的腳本文件通過REST API來實(shí)現(xiàn)與Docker進(jìn)程交互,又可以直接使用Docker相關(guān)指令通過命令行接口來與Docker進(jìn)程交互,而其他一些Docker應(yīng)用則是通過底層的API和CLI進(jìn)行交互的。
了解了Docker內(nèi)部引擎及作用后,我們還需要通過Docker的具體架構(gòu),來了解Docker的整個(gè)運(yùn)行流程。接下來借助Docker官網(wǎng)的架構(gòu)圖來對(duì)Docker架構(gòu)進(jìn)行詳細(xì)說明,如圖1所示。
圖1 Docker架構(gòu)
從圖1中可以看出,Docker架構(gòu)主要包括Client、DOCKER_HOST和Register三部分,關(guān)于這三部分的具體說明如下。
1.Client(客戶端)
Client即Docker客戶端,也就是上一小節(jié)Docker Engine中介紹的docker CLI。開發(fā)者通過這個(gè)客戶端使用Docker的相關(guān)指令與Docker守護(hù)進(jìn)程進(jìn)行交互,從而進(jìn)行Docker鏡像的創(chuàng)建、拉取和運(yùn)行等操作。
2.DOCKER_HOST(Docker主機(jī))
DOCKER_HOST即Docker內(nèi)部引擎運(yùn)行的主機(jī),主要指Docker daemon(Docker守護(hù)進(jìn)程)。可以通過Docker守護(hù)進(jìn)程與客戶端還有Docker的鏡像倉庫Registry進(jìn)行交互,從而管理Images(鏡像)和Containers(容器)等。
3.Registry(注冊(cè)中心)
Registry即Docker注冊(cè)中心,實(shí)質(zhì)就是Docker鏡像倉庫,默認(rèn)使用的是Docker官方遠(yuǎn)程注冊(cè)中心Docker Hub,也可以使用開發(fā)者搭建的本地倉庫。Registry中包含了大量的鏡像,這些鏡像可以是官網(wǎng)基礎(chǔ)鏡像,也可以是其他開發(fā)者上傳的鏡像。
我們?cè)趯?shí)際使用Docker時(shí),除了會(huì)涉及到圖中的三個(gè)主要部分外,還會(huì)涉及到很多Docker Objects(Docker對(duì)象),例如Images(鏡像)、Containers(容器)、Networks(網(wǎng)絡(luò))、Volumes(數(shù)據(jù)卷)、Plugins(插件)等。其中常用的兩個(gè)對(duì)象Image和Containers的說明如下。
● Images(鏡像)
Docker 鏡像就是一個(gè)只讀的模板,包含了一些創(chuàng)建Docker容器的操作指令。通常情況下,一個(gè)Docker鏡像是基于另一個(gè)基礎(chǔ)鏡像創(chuàng)建的,并且新創(chuàng)建的鏡像會(huì)額外包含一些功能配置。例如:開發(fā)者可以依賴于一個(gè)Ubuntu的基礎(chǔ)鏡像創(chuàng)建一個(gè)新鏡像,并可以在新鏡像中安裝Apache等軟件或其它應(yīng)用程序。
● Containers(容器)
Docker容器屬于鏡像的一個(gè)可運(yùn)行實(shí)例(鏡像與容器的關(guān)系其實(shí)與Java中的類與對(duì)象相似),開發(fā)者可以通過API接口或者CLI命令行接口來創(chuàng)建、運(yùn)行、停止、移動(dòng)、刪除一個(gè)容器,也可以將一個(gè)容器連接到一個(gè)或多個(gè)網(wǎng)絡(luò)中,將數(shù)據(jù)存儲(chǔ)與容器進(jìn)行關(guān)聯(lián)。
Docker使用了一系列的底層技術(shù)來充分發(fā)揮其技術(shù)特色,這些底層技術(shù)包括有Namespaces、Control groups、Union file systems和Container format等,其具體含義如下。
Docker使用名稱空間來為容器提供隔離的工作空間。當(dāng)一個(gè)容器運(yùn)行時(shí),Docker就會(huì)為該容器創(chuàng)建一系列的名稱空間,并為名稱空間提供一層隔離。每一個(gè)容器都運(yùn)行在相對(duì)隔離的環(huán)境下,對(duì)其他名稱空間是相對(duì)受限的。
2.Control groups(控制組)
基于Linux系統(tǒng)的Docker引擎也依賴于另一項(xiàng)叫做Control groups(cgroups,控制組)的技術(shù)。控制組可以對(duì)程序進(jìn)行資源限定,并允許Docker引擎在容器間進(jìn)行硬件資源共享以及隨時(shí)進(jìn)行限制和約束,例如,開發(fā)者可以限制某特定容器的可用內(nèi)存。
3.Union file systems(聯(lián)合文件系統(tǒng))
聯(lián)合文件系統(tǒng)(UnionFS)是一種分層、輕量級(jí)并且高性能的文件系統(tǒng),它支持將文件系統(tǒng)的修改作為一次提交來一層層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下。不同Docker容器可以共享一些基礎(chǔ)的文件系統(tǒng)層,與自己獨(dú)有的改動(dòng)層一起使用,可以大大的提高存儲(chǔ)效率。Docker目前支持的聯(lián)合文件系統(tǒng)包括AUFS、btrfs、 vfs 和 DeviceMapper。
4.Container format(容器格式)
Docker引擎將名稱空間、控制組和聯(lián)合文件系統(tǒng)組合成一個(gè)叫做容器格式的整體。當(dāng)前默認(rèn)的容器格式是libcontainer,未來Docker可能會(huì)通過與其他技術(shù)(如BSD Jails或者Solaris Zones)的集成使用來開發(fā)其他的容器格式。
總結(jié)
以上是生活随笔為你收集整理的Docker的运行机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 容器技术之二.Docker的安装和常见问
- 下一篇: docker file的介绍