這篇文章主要介紹Docker底層技術(shù)之Namespaces和Control groups的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(創(chuàng)新互聯(lián)建站).為客戶提供專業(yè)的托管服務(wù)器,四川各地服務(wù)器托管,托管服務(wù)器、多線服務(wù)器托管.托管咨詢專線:18980820575
Docker底層技術(shù):
docker底層的2個(gè)核心技術(shù)分別是Namespaces和Control groups
Namespace:是容器虛擬化的核心技術(shù),用來隔離各個(gè)容器,可解決容器之間的沖突。
主要通過以下六項(xiàng)隔離技術(shù)來實(shí)現(xiàn):
有兩個(gè)偽文件系統(tǒng):/proc和/sys/
UTS:允許每個(gè)container擁有獨(dú)立的hostname(主機(jī)名)和domainname(域名),使其在網(wǎng)絡(luò)上可以被視作一個(gè)獨(dú)立的節(jié)點(diǎn)而非Host上的一個(gè)進(jìn)程。
IPC:contaner中進(jìn)程交互還是采用linux常見的進(jìn)程間交互方法,包括常見的信號(hào)量,消息隊(duì)列和共享內(nèi)存。container的進(jìn)程間交互實(shí)際上還是host上具有相同pid中的進(jìn)程交互。
PID:不同用戶的進(jìn)程就是通過pid namesapce隔離開的,且不同namespace中可以有相同pid。所有的LXC(linux containers)進(jìn)程在docker中的父進(jìn)程為docker進(jìn)程,每個(gè)LXC進(jìn)程具有不同的namespace。
NET:不同用戶的進(jìn)程就是通過pidnamespace隔離開的,且不同namespace中可以有相同pid。所有的LXC進(jìn)程在docker中的父進(jìn)程為docker進(jìn)程,每個(gè)lxc進(jìn)程具有不同的namespace。
MNT:文件系統(tǒng)的掛載點(diǎn)。
USRE:每個(gè)container可以有不同的user和groupid,也就是說可以在container內(nèi)部用container內(nèi)部的用戶執(zhí)行程序而非Host上的用戶。
只要解耦了這6項(xiàng),其他系統(tǒng)資源即便有共用的情況,計(jì)算機(jī)也認(rèn)為是在兩個(gè)不同的系統(tǒng)中。
cgroup(控制程序?qū)Y源的占用)
實(shí)現(xiàn)cgroup是的主要目的是為不同用戶層面的資源管理,提供一個(gè)統(tǒng)一化的接口。從單個(gè)進(jìn)程的資源控制到操作系統(tǒng)層面的虛擬化。
cgroup的作用:
1) 資源的限制:cgroup可以對(duì)進(jìn)程組使用的資源總額進(jìn)行限制。
2) 優(yōu)先級(jí)分配:通過分配的cpu時(shí)間片數(shù)量及磁盤IO帶寬大小,實(shí)際上就是相當(dāng)于控制了進(jìn)程運(yùn)行的優(yōu)先級(jí)
3) 資源統(tǒng)計(jì):Cgroup可以統(tǒng)計(jì)系統(tǒng)資源使用量。比如cpu使用時(shí)間,內(nèi)存使用量等。
可用于按量計(jì)費(fèi)。
4) 進(jìn)程控制:可以對(duì)進(jìn)程組執(zhí)行掛起,恢復(fù)等操作。
cgroup的應(yīng)用:
1)內(nèi)存和交換分區(qū)的限制:
容器內(nèi)包括兩個(gè)部分:物理內(nèi)存和swap
在docker中可以通過參數(shù)控制容器內(nèi)存的使用:
-m或--memory:設(shè)置內(nèi)存的使用限額
--memory-swap:設(shè)置swap(交換分區(qū))的使用限額
//基于centos鏡像,限制內(nèi)存為200M,交換分區(qū)的內(nèi)存為300M
[root@sqm-docker01 ~]# docker run -it -m 200M --memory-swap 300M centos
進(jìn)入容器查看限制的內(nèi)存:
[root@05a0be7b870a /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes 209715200 #顯示的是字節(jié) [root@05a0be7b870a /]# cat /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes 314572800
2)容器對(duì)cpu限制:
通過-c或者--cpu-shares設(shè)置容器實(shí)驗(yàn)cpu的權(quán)重。如果不設(shè)置默認(rèn)是1024.
//基于centos鏡像,運(yùn)行一個(gè)容器,名字為containerB,cpu權(quán)重限制為512: [root@sqm-docker01 ~]# docker run -it --name containerB -c 512 centos [root@b2cf9f28ce1d /]# cat /sys/fs/cgroup/cpu/cpu.shares 512
3)限制容器的Block io(磁盤的讀寫):
bps:每秒讀寫的數(shù)據(jù)量。byte per second
iops:每秒io的次數(shù)。 io per second--device-read-bps:設(shè)置讀取設(shè)備的bps
--device-write-bps:設(shè)置寫入設(shè)備的bps--device-read-iops:設(shè)置讀取設(shè)備的iops
--device-write-iops:設(shè)置寫入設(shè)備的iops
//創(chuàng)建一個(gè)容器名為testA,并限制該磁盤每秒寫入的數(shù)量為為30MB。 [root@sqm-docker01 ~]# docker run -it --name testA --device-write-bps /dev/sda:30MB centos
寫入數(shù)據(jù)進(jìn)行測(cè)試:
參數(shù)解釋:
infile=從/dev/zero中提取
outfile=自定義一個(gè)名稱
bs=1M 文件大小為1M
count=800 總共寫800次。
oflag=direct:用來指定directory IO方式寫文件,這樣才會(huì)使--device-write-bps生效。
可以發(fā)現(xiàn)每秒寫入的數(shù)量為80M,大概用時(shí)26s。
正常寫入磁盤時(shí):
以上是“Docker底層技術(shù)之Namespaces和Control groups的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞標(biāo)題:Docker底層技術(shù)之Namespaces和Controlgroups的示例分析
分享網(wǎng)址:http://www.2m8n56k.cn/article42/jojihc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站維護(hù)、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計(jì)、營銷型網(wǎng)站建設(shè)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)