久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

共計(jì) 1961 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。

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

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

cgroup

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

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

查看容器的 ID

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

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

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

namespace

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

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

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

Mount namespace

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

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

UTS namespace

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

IPC namespace

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

PID namespace

我們前面提到過,容器在 host 中以進(jìn)程的形式運(yùn)行。例如當(dāng)前 host 中運(yùn)行了兩個(gè)容器:

通過  ps axf  可以查看容器進(jìn)程

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

而且進(jìn)程的 PID 不同于 host 中對(duì)應(yīng)進(jìn)程的 PID,容器中 PID=1 的進(jìn)程當(dāng)然也不是 host 的 init 進(jìn)程。也就是說:容器擁有自己獨(dú)立的一套 PID,這就是 PID namespace 提供的功能。

Network namespace

Network namespace 讓容器擁有自己獨(dú)立的網(wǎng)卡、IP、路由等資源。我們會(huì)在后面網(wǎng)絡(luò)章節(jié)詳細(xì)討論。

User namespace

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

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

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

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

create       創(chuàng)建容器  

run         運(yùn)行容器  

pause       暫停容器  

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

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

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

start       啟動(dòng)容器  

restart     重啟容器  

attach      attach 到容器啟動(dòng)進(jìn)程的終端  

exec         在容器中啟動(dòng)新進(jìn)程,通常使用 -it 參數(shù)  

logs         顯示容器啟動(dòng)進(jìn)程的控制臺(tái)輸出,用 -f 持續(xù)打印  

rm           從磁盤中刪除容器

看完上述內(nèi)容,你們對(duì)怎樣實(shí)現(xiàn) Docker 容器的底層技術(shù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計(jì)1961字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 论坛| 庐江县| 图们市| 教育| 方城县| 新疆| 龙陵县| 团风县| 龙口市| 吉水县| 东乡族自治县| 娄烦县| 大埔县| 翁牛特旗| 彭阳县| 松阳县| 江孜县| 寿宁县| 慈利县| 桃园县| 出国| 丰镇市| 潍坊市| 长乐市| 永新县| 平和县| 获嘉县| 威海市| 沙洋县| 洪江市| 乐陵市| 宁强县| 牟定县| 合川市| 桃江县| 太仆寺旗| 苗栗县| 泉州市| 贵德县| 漯河市| 旬阳县|