怎樣實現(xiàn)Docker容器的底層技術

今天就跟大家聊聊有關怎樣實現(xiàn)Docker 容器的底層技術,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

公司主營業(yè)務:成都網站設計、網站制作、外貿營銷網站建設、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出西烏珠穆沁免費做網站回饋大家。

為了更好地理解容器的特性,我們將討論容器的底層實現(xiàn)技術。
cgroup 和 namespace 是最重要的兩種技術。cgroup 實現(xiàn)資源限額, namespace 實現(xiàn)資源隔離。

cgroup

cgroup 全稱 Control Group。Linux 操作系統(tǒng)通過 cgroup 可以設置進程使用 CPU、內存 和 IO 資源的限額。相信你已經猜到了:前面我們看到的--cpu-shares、-m、--device-write-bps 實際上就是在配置 cgroup。

cgroup 到底長什么樣子呢?我們可以在 /sys/fs/cgroup 中找到它。還是用例子來說明,啟動一個容器,設置 --cpu-shares=512

查看容器的 ID

在 /sys/fs/cgroup/cpu/docker 目錄中,Linux 會為每個容器創(chuàng)建一個 cgroup 目錄,以容器長ID 命名

目錄中包含所有與 cpu 相關的 cgroup 配置,文件 cpu.shares 保存的就是 --cpu-shares 的配置,值為 512。

同樣的,/sys/fs/cgroup/memory/docker 和 /sys/fs/cgroup/blkio/docker 中保存的是內存以及 Block IO 的 cgroup 配置。

namespace

在每個容器中,我們都可以看到文件系統(tǒng),網卡等資源,這些資源看上去是容器自己的。拿網卡來說,每個容器都會認為自己有一塊獨立的網卡,即使 host 上只有一塊物理網卡。這種方式非常好,它使得容器更像一個獨立的計算機。

Linux 實現(xiàn)這種方式的技術是 namespace。namespace 管理著 host 中全局唯一的資源,并可以讓每個容器都覺得只有自己在使用它。換句話說,namespace 實現(xiàn)了容器間資源的隔離。

Linux 使用了六種 namespace,分別對應六種資源:Mount、UTS、IPC、PID、Network 和 User,下面我們分別討論。

Mount namespace

Mount namespace 讓容器看上去擁有整個文件系統(tǒng)。

容器有自己的 / 目錄,可以執(zhí)行 mount 和 umount 命令。當然我們知道這些操作只在當前容器中生效,不會影響到 host 和其他容器。

UTS namespace

簡單的說,UTS namespace 讓容器有自己的 hostname。 默認情況下,容器的 hostname 是它的短ID,可以通過 -h 或 --hostname 參數(shù)設置。

IPC namespace

IPC namespace 讓容器擁有自己的共享內存和信號量(semaphore)來實現(xiàn)進程間通信,而不會與 host 和其他容器的 IPC 混在一起。

PID namespace

我們前面提到過,容器在 host 中以進程的形式運行。例如當前 host 中運行了兩個容器:

通過 ps axf 可以查看容器進程

所有容器的進程都掛在 dockerd 進程下,同時也可以看到容器自己的子進程。 如果我們進入到某個容器,ps 就只能看到自己的進程了。

而且進程的 PID 不同于 host 中對應進程的 PID,容器中 PID=1 的進程當然也不是 host 的 init 進程。也就是說:容器擁有自己獨立的一套 PID,這就是 PID namespace 提供的功能。

Network namespace

Network namespace 讓容器擁有自己獨立的網卡、IP、路由等資源。我們會在后面網絡章節(jié)詳細討論。

User namespace

User namespace 讓容器能夠管理自己的用戶,host 不能看到容器中創(chuàng)建的用戶。

在容器中創(chuàng)建了用戶 cloudman,但 host 中并不會創(chuàng)建相應的用戶。

首先通過大量實驗學習了容器的各種操作以及容器狀態(tài)之間如何轉換,然后討論了限制容器使用 CPU、內存和 Block IO 的方法,最后學習了實現(xiàn)容器的底層技術:cgroup 和 namespace。

下面是容器的常用操作命令:

create      創(chuàng)建容器  

run         運行容器  

pause       暫停容器  

unpause     取消暫停繼續(xù)運行容器  

stop        發(fā)送 SIGTERM 停止容器  

kill        發(fā)送 SIGKILL 快速停止容器  

start       啟動容器  

restart     重啟容器  

attach      attach 到容器啟動進程的終端  

exec        在容器中啟動新進程,通常使用 "-it" 參數(shù)  

logs        顯示容器啟動進程的控制臺輸出,用 "-f" 持續(xù)打印  

rm          從磁盤中刪除容器

看完上述內容,你們對怎樣實現(xiàn)Docker 容器的底層技術有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

分享名稱:怎樣實現(xiàn)Docker容器的底層技術
網站路徑:http://bm7419.com/article32/igchpc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站設計、搜索引擎優(yōu)化、域名注冊、外貿建站、動態(tài)網站、網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)