1. 程式人生 > >【Docker學習總結】2.Docker的基本組成介紹

【Docker學習總結】2.Docker的基本組成介紹

上一篇總結我們介紹了Docker的基本資訊、優點以及使用場景。本篇我們來介紹一下Docker的基本組成。

Docker包含了以下的幾個部分:

Docker Client客戶端
Docker Daemon守護程序
Docker Image映象
Docker Container容器
Docker Registry倉庫

整個C/S系統的服務架構如下圖所示:

整個流程就是,Docker Client客戶端釋出請求指令,Docker Daemon守護程序接受指令(守護程序位於一臺伺服器),然後操作基於Docker Image映象的Docker Container容器中的應用,同時Docker Registry倉庫提供了另外疊加的Docker Image映象檔案系統。

一、Docker客戶端/守護程序

Docker是C/S(客戶端/伺服器)架構的程式,Docker的客戶端,向Docker的服務端(即守護程序)發出請求,守護程序處理完所有的工作,並返回結果。
Docker客戶端對伺服器端的訪問,既可以是在本地,也可以通過遠端來訪問。
下圖可以幫助我們很好理解Docker的C/S架構:

我們通過Docker客戶端,執行各種命令,然後Docker客戶端會將這些命令傳送給守護程序。守護程序執行的結果,還會傳回給客戶端,使我們能夠通過客戶端,開檢視命令執行的結果。

二、Docker Image映象

映象是Docker容器的基石,容器基於映象啟動和執行。映象就好比容器的原始碼,儲存了用於啟動容器的各種條件。
如果更深一層的剖析Docker的Image映象,其是一個層疊的只讀系統:


它的最底端,是一個引導檔案系統,即bootfs。計算機系統中載入程式的作用是進行系統初始化工作,以及將OS的核心程式裝入主存。這很像典型的Linux引導系統,而使用者幾乎不會和引導檔案系統進行互動。
實際上,當一個容器啟動後,它將會被引入到記憶體中,而引導檔案系統會被解除安裝。

它的第二層,是rootfs(root檔案系統),它位於引導檔案之上。root檔案系統可以是一種或者多種的作業系統,例如Ubuntu或Cent OS。在傳統的Linux引導過程中,root檔案系統以只讀的方式載入,當引導結束並完成了完整性檢查後,它才會被切換為讀寫模式。但是在Docker容器中,root檔案系統永遠只能為只讀狀態,並且Docker利用聯合載入(union mount)技術,又會在root檔案系統之上,載入更多的只讀檔案系統。聯合載入的意思就是,一次同時載入多個檔案系統,但是在外面看起來,只能看到一個檔案系統。聯合載入會將各層檔案系統疊加到一起,讓最終的檔案系統,會包含所有的底層檔案和目錄。

Docker將這樣的檔案系統成為“映象”。一個映象可以放到另一個映象的頂部,位於下面的映象,稱為父映象,可以以此類推,直到映象棧的最底部,而最底部的映象,稱為“基礎映象”。也就是上圖的映象棧中的rootfs檔案系統。所有的層都會有一個指標指向下一層。

三、Docker Container容器

Docker Container容器是通過映象啟動的,Container容器是Docker的執行單元,容器中可以執行客戶的一個或多個程序。
如果說映象是Docker生命週期的【構建和打包階段】,那麼容器則是Docker生命週期的【啟動和執行階段】。

那麼,容器是怎麼通過映象來啟動的呢,看一下上面的映象結構圖:

當一個容器啟動時,Docker會在容器的最頂層,載入一個讀寫檔案系統,也就是一個可寫的檔案層。我們在Docker中執行的程式,就是在這個層中進行執行的。
當Docker第一次啟動一個容器時,初始的讀寫層是空的。當檔案系統發生變化時,這些變化都會應用到這一層上。比如,我們想修改一個檔案,這個檔案首先會從讀寫層下面的只讀層,複製到上面的讀寫層,該檔案的只讀版本依然存在,但是已經被讀寫層中的該檔案副本所隱藏,這就是Docker中的一個重要技術,即“寫時複製(copy on write)”,每個只讀映象層都是隻讀的,並且以後永遠不會變化。
當建立一個新容器時,Docker會構建一個映象棧,就像上圖中展現的,在棧的最頂層新增可寫層。這個讀寫層,加上下面的映象層,以及一些配置資料,就構成了一個容器,也即是:容器 = 映象 + 可讀層。

容器的這種特點,加上映象分層的框架,使我們可以快速的構建映象,並允許包含我們自己的應用程式和服務的容器。

四、Docker Registry倉庫

Docker用倉庫來儲存使用者構建的映象,倉庫分為“公有”和“私有”兩種。Docker公司自己提供了一個公有的倉庫,叫做“Docker Hub”。我們可以在“Docker Hub”上去註冊賬號,分享並儲存自己的映象。目前“Docker Hub”已經有了非常豐富的映象,所以我們也可以通過“Docker Hub”來查詢我們需要的映象,為我們節省很多的構建映象的時間。
當然,我們也可以架設自己的私有倉庫,後面會有所介紹。

回顧一下Docker的各個組成部分的關係:

我們通過客戶端,來訪問Docker的守護程序,從而操作Docker的容器,而容器是通過映象來建立的,而映象儲存在倉庫中。

下一篇將為大家介紹Docker容器技術所依賴的Linux核心技術----Namespace和CGroup技術,使我們更深入的瞭解Docker容器技術。


參考資料:
《極客學院Docker學習》教學視訊
幾張圖幫你理解 docker 基本原理及快速入門:
https://www.cnblogs.com/SzeCheng/p/6822905.html

轉載請註明出處:https://blog.csdn.net/acmman/article/details/83212681