您好,登錄后才能下訂單哦!
這篇文章主要介紹Docker底層技術之Namespaces和Control groups的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Docker底層技術:
docker底層的2個核心技術分別是Namespaces和Control groups
Namespace:是容器虛擬化的核心技術,用來隔離各個容器,可解決容器之間的沖突。
主要通過以下六項隔離技術來實現:
有兩個偽文件系統:/proc和/sys/
UTS:允許每個container擁有獨立的hostname(主機名)和domainname(域名),使其在網絡上可以被視作一個獨立的節點而非Host上的一個進程。
IPC:contaner中進程交互還是采用linux常見的進程間交互方法,包括常見的信號量,消息隊列和共享內存。container的進程間交互實際上還是host上具有相同pid中的進程交互。
PID:不同用戶的進程就是通過pid namesapce隔離開的,且不同namespace中可以有相同pid。所有的LXC(linux containers)進程在docker中的父進程為docker進程,每個LXC進程具有不同的namespace。
NET:不同用戶的進程就是通過pidnamespace隔離開的,且不同namespace中可以有相同pid。所有的LXC進程在docker中的父進程為docker進程,每個lxc進程具有不同的namespace。
MNT:文件系統的掛載點。
USRE:每個container可以有不同的user和groupid,也就是說可以在container內部用container內部的用戶執行程序而非Host上的用戶。
只要解耦了這6項,其他系統資源即便有共用的情況,計算機也認為是在兩個不同的系統中。
cgroup(控制程序對資源的占用)
實現cgroup是的主要目的是為不同用戶層面的資源管理,提供一個統一化的接口。從單個進程的資源控制到操作系統層面的虛擬化。
cgroup的作用:
1) 資源的限制:cgroup可以對進程組使用的資源總額進行限制。
2) 優先級分配:通過分配的cpu時間片數量及磁盤IO帶寬大小,實際上就是相當于控制了進程運行的優先級
3) 資源統計:Cgroup可以統計系統資源使用量。比如cpu使用時間,內存使用量等。
可用于按量計費。
4) 進程控制:可以對進程組執行掛起,恢復等操作。
cgroup的應用:
1)內存和交換分區的限制:
容器內包括兩個部分:物理內存和swap
在docker中可以通過參數控制容器內存的使用:
-m或--memory:設置內存的使用限額
--memory-swap:設置swap(交換分區)的使用限額
//基于centos鏡像,限制內存為200M,交換分區的內存為300M
[root@sqm-docker01 ~]# docker run -it -m 200M --memory-swap 300M centos
進入容器查看限制的內存:
[root@05a0be7b870a /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes 209715200 #顯示的是字節 [root@05a0be7b870a /]# cat /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes 314572800
2)容器對cpu限制:
通過-c或者--cpu-shares設置容器實驗cpu的權重。如果不設置默認是1024.
//基于centos鏡像,運行一個容器,名字為containerB,cpu權重限制為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:每秒讀寫的數據量。byte per second
iops:每秒io的次數。 io per second--device-read-bps:設置讀取設備的bps
--device-write-bps:設置寫入設備的bps--device-read-iops:設置讀取設備的iops
--device-write-iops:設置寫入設備的iops
//創建一個容器名為testA,并限制該磁盤每秒寫入的數量為為30MB。 [root@sqm-docker01 ~]# docker run -it --name testA --device-write-bps /dev/sda:30MB centos
寫入數據進行測試:
參數解釋:
infile=從/dev/zero中提取
outfile=自定義一個名稱
bs=1M 文件大小為1M
count=800 總共寫800次。
oflag=direct:用來指定directory IO方式寫文件,這樣才會使--device-write-bps生效。
可以發現每秒寫入的數量為80M,大概用時26s。
正常寫入磁盤時:
以上是“Docker底層技術之Namespaces和Control groups的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。