【Docker學習總結】3.Docker 容器相關技術簡介
上一篇總結學習了Docker的基本組成,大致瞭解了Docker是由Docker Client客戶端、Docker Daemon守護程序、Docker Image映象、Docker Container容器以及Docker Registry倉庫組成。本篇將繼續瞭解Docker針對容器的相關底層技術,即是ocker容器所依賴的Linux核心技術----Namespace和CGroup技術。
在第一篇中瞭解了,Docker依賴Linux核心的特性,Namespace名稱空間以及Control groups(CGroup)控制組,通過學習這兩種特性,能夠更好的幫助我們理解Docker容器的資源分配和管理。
一、Namespace名稱空間
很多程式語言都包含了“名稱空間”的概念,我們可以認為“名稱空間”是一種“封裝”的概念, 而“封裝”本身實際上實現的是程式碼的隔離。
而在作業系統中,名稱空間提供的是系統資源的隔離,而系統資源包括了程序、網路、檔案系統等:
而實際上,Linux實現名稱空間的主要目的之一,就是為了實現輕量級虛擬化服務,也就是我們說的容器。在同一個名稱空間下的程序,可以感知彼此的變化,而對其它名稱空間中的程序一無所知。這讓就可以讓容器中的程序產生一種錯覺,彷彿它自己置身於一個獨立的系統環境中,以此達到“獨立”和“隔離”的目的。
我們從Docker公開的文件來看,它使用了5種名稱空間:
(1)PID(Process ID) 程序隔離
(2)NET(NetWork) 管理網路介面
(3)IPC(InterProcess Communication) 管理跨程序通訊的訪問
(4)MNT(Mount) 管理掛載點
(5)UTS(Unix Timesharing System) 隔離核心和版本標識
那麼,這些隔離的資源,是如何被管理起來的呢?這就需要用到------Control groups(CGroup)控制組了。
二、Control groups(CGroup)控制組
Control groups是Linux核心提供的,一種可以限制、記錄、隔離程序組所使用的物理資源的機制。
最初是由google工程師提出,並且在2007年時被Linux kernel的核心中的2.6.24版本引進。可以說,Control groups就是為容器而生的,沒有Control groups就沒有容器技術的今天。
Control groups提供了以下功能:
(1)資源限制
例如,memory(記憶體)子系統可以為程序組設定一個記憶體使用的上限,一旦程序組使用的記憶體達到了限額,該程序組再發出記憶體申請時,就會發出“out of memory”(記憶體溢位)的警告。
(2)優先順序設定
它可以設定哪些程序組可以使用更大的CPU或者磁碟IO的資源。
(3)資源計量
它可以計算程序組使用了多少系統資源。尤其是在計費系統中,這一點十分重要。
(4)資源控制
它可以將程序組掛起或恢復。
三、Namespace和CGroup帶給Docker的能力
到這裡我們瞭解了Namespace和CGroup的概念和職能,而這兩個特性帶給了Docker哪些能力呢?如下:
(1)檔案系統隔離
首先是檔案系統的隔離,每個Docker的容器,都可以擁有自己的root檔案系統。
(2)程序隔離
每個容器都執行在自己的程序環境中。
(3)網路隔離
容器間的虛擬網路介面和IP地址都是分開的。
(4)資源的隔離和分組
使用cgroups將cpu和記憶體之類的資源獨立分配給每個Docker容器。
到這裡,我們對Docker容器的能力已經有了一個大致的瞭解,通過前面的幾篇總結,我們也瞭解了Docker是什麼,以及Docker由哪些部分組成。後面的總結將為大家詳細介紹Docker是怎樣安裝、部署和使用的。
參考資料:
《極客學院Docker學習》教學視訊