博文大綱:
一、Docker概述
二、Namespace概念
三、Cgroup基本概念與示例創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
Docker作為開源社區(qū)最火爆的項目,它是在Linux容器里運(yùn)行應(yīng)用的開源工具,是一種輕量級的“虛擬機(jī)”,docker的全部源代碼都在https://github.com/docker 進(jìn)行相關(guān)維護(hù),其官網(wǎng)是:https://www.docker.com 。
Docker的Logo設(shè)計為藍(lán)色鯨魚,拖著許多集裝箱。如圖:
如圖所示:鯨魚可以看作宿主機(jī),而集裝箱可以理解為相互隔離的容器,每個集裝箱中都包含自己的應(yīng)用程序。正如 Docker的設(shè)計宗旨一樣:Buid、 Ship and Run Any App、 Anywhere,即通過對應(yīng)用組件的封裝、發(fā)布、部署、運(yùn)行等生命周期的管理,達(dá)到應(yīng)用組件級別的“一次封裝,到處運(yùn)行”的目的。這里的組件,既可以是一個應(yīng)用,也可以是一套服務(wù),甚至是一個完整的操作系統(tǒng)。
作為一種輕量級的虛擬化方式,Docker與傳統(tǒng)虛擬機(jī)相比具有顯著的優(yōu)勢。如圖:
Docker之所以擁有眾多優(yōu)勢,與操作系統(tǒng)虛擬化自身的特點是分不開的。傳統(tǒng)虛擬機(jī)需要有額外的虛擬機(jī)管理程序和虛擬操作系統(tǒng)層,而Docker容器是直接在操作系統(tǒng)層面之上實現(xiàn)的虛擬化,如圖:
現(xiàn)在需要能方便地創(chuàng)建運(yùn)行在云平臺上的應(yīng)用,必須要脫離底層的硬件,同時還需要任何時間、地點可獲取這些資源,這正是Docker所能提供的。
Docker的容器技術(shù)可以在一條主句上輕松為任何應(yīng)用創(chuàng)建一個輕量級的、可移植的、自給自足的容器。通過這種容器打包應(yīng)用程序,意味著簡化了重新部署、調(diào)試這些瑣碎的重復(fù)工作,極大地提高了工作效率。
比如:服務(wù)器從騰訊云遷移到阿里云,如果采用了Docker容器技術(shù),遷移只需要在新的服務(wù)器上啟動需要的容器即可。
- 靈活性:在復(fù)雜的應(yīng)用都可以被容器化;
- 輕量級:容器利用共享的是主機(jī)的內(nèi)核;
- 即時性:可以隨時部署更新和升級;
- 通用性:一次封裝,到處運(yùn)行;
- 伸縮性:控制容器副本數(shù)量來任意伸縮;
虛擬化的技術(shù)就是用來解決宿主機(jī)與虛擬機(jī)之間的耦合問題(簡稱“解耦”),傳統(tǒng)虛擬化技術(shù)是屬于完全解耦的,而docker這種虛擬化技術(shù)是屬于半解耦的。
耦合:就是指兩個或兩個以上的體系或兩種運(yùn)動形式間通過相互作用而彼此影響以至聯(lián)合起來的現(xiàn)象;
解耦:接觸耦合、沖突現(xiàn)象;
Docker是如何解耦的呢?這就需要使用到——Namespace(命名空間)。
Namespace(命名空間):是Linux為我們提供的用于分離進(jìn)程樹、網(wǎng)絡(luò)接口、掛載點以及進(jìn)程間通信等資源的方法。
Namespace(命名空間)在docker中主要實現(xiàn)了六項隔離,如圖:
Docker通過使用Namespace(命名空間)這項技術(shù)實現(xiàn)了容器與容器之間、容器與docker host之間的隔離。
當(dāng)Docker創(chuàng)建一個容器時,它會創(chuàng)建新的以上六種NameSpace的實例,然后把容器中的所有進(jìn)程放到這些NameSpace之中,使得容器這個父進(jìn)程只對自己的子進(jìn)程有感知,而對于宿主機(jī)其他進(jìn)程一無所知,從而產(chǎn)生一種它就是一個獨(dú)立的系統(tǒng)的“錯覺”。
如果docker 宿主機(jī)是centos系統(tǒng),運(yùn)行docker容器時,容器也是centos 系統(tǒng),所必需的目錄、文件就是通過docker宿主機(jī)進(jìn)行軟連接提供的,包括宿主機(jī)的內(nèi)核;但如果運(yùn)行的docker容器是Ubuntu系統(tǒng),其中目錄、文件與centos 系統(tǒng)始終是會有一些區(qū)別的,那么這就需要使用到——Busybox(欺騙層)。
如果需要使用虛擬機(jī)來部署一些服務(wù)時,這些服務(wù)對內(nèi)核版本有要求,那么就不太適合使用docker這種虛擬化技術(shù),建議使用KVM等虛擬化技術(shù)。
docker這種服務(wù)本身并不占用端口,只是保持后臺運(yùn)行。
Cgroup(控制組):是Linux內(nèi)核提供的一種限制Docker容器使用Docker宿主機(jī)資源的一種機(jī)制。
Cgroup四大功能:
- 1)資源限制;Cgroup可以對進(jìn)程組使用的資源總額進(jìn)行限制;
- 2)優(yōu)先級分配;通過分配的CPU時間片數(shù)量以及硬盤IO帶寬大小,實際相當(dāng)于控制了進(jìn)程運(yùn)行的優(yōu)先級別;
- 3)資源統(tǒng)計;Cgroup可以統(tǒng)計系統(tǒng)資源使用量,比如CPU使用時間,內(nèi)存使用量等,用于按量計費(fèi)。同時還支持掛起功能,也就是說通過cgroup吧所有資源限制起來,對資源都不能使用,注意這并不意味說我們的程序不能使用了,只是不能使用資源,處于等待狀態(tài);
- 4)進(jìn)程控制;可以對進(jìn)程組執(zhí)行掛起、恢復(fù)等操作;
通過Cgroup,我們就可以具體地控制對系統(tǒng)資源的分配、優(yōu)先順序、拒絕、管理和監(jiān)控。這樣就可以避免在docker容器中服務(wù)受到外部干擾時,可以將其限制在容器之中,而不會影響宿主機(jī)或其他容器的運(yùn)行的,提高了安全性。
Docker是通過以下幾個方面對容器使用的資源進(jìn)行限制:
示例如下:
[root@localhost ~]# cat /sys/fs/cgroup/cpu/cpu.shares
1024
//查看宿主機(jī)默認(rèn)的CPU權(quán)重為1024
[root@localhost ~]# docker run -it --name test centos:7 //隨便創(chuàng)建一個容器進(jìn)行測試
[root@6afc120f16e1 /]# cat /sys/fs/cgroup/cpu/cpu.shares
1024
//可以看到默認(rèn)情況下,docker容器默認(rèn)的CPU權(quán)重也是1024
如果不對容器進(jìn)行限制的話,是非常危險的,因為Docker宿主機(jī)與Docker容器對CPU的權(quán)重值是一樣的,這樣,它們在對CPU資源進(jìn)行搶占時,比例為1:1。顯然在生產(chǎn)環(huán)境中需要對其做一些限制,方法如下:
[root@localhost ~]# docker run -it --name test1 -c 512 centos:7
//基于centos鏡像運(yùn)行一個名為test1的容易,其CPU使用的權(quán)重為512
//設(shè)置方法相對來說,十分簡單,就是添加了一個“-t”的選項而已!
[root@fc842b8af840 /]# cat /sys/fs/cgroup/cpu/cpu.shares
512
//驗證是否設(shè)置是否成功
容器內(nèi)存主要包括兩部分:物理內(nèi)存與Swap(交換分區(qū))
可以通過以下參數(shù)控制容器對內(nèi)存的使用情況:
[root@localhost ~]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
9223372036854771712
//查看宿主機(jī)對內(nèi)存的使用情況,單位是字節(jié),這么大的數(shù)字表示沒有限制
[root@localhost ~]# docker run -it --name test2 centos:7
[root@d65dd3da663c /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
9223372036854771712
//創(chuàng)建容器,查看容器對宿主機(jī)內(nèi)存的使用情況,單位是字節(jié),這么大的數(shù)字表示沒有限制
通過以下可以看出這樣是不安全的,所以需要使用以下方法對其進(jìn)行限制,方法如下:
[root@localhost ~]# docker run -it --name test4 -m 200M --memory-swap 300M centos:7
//創(chuàng)建一個容器,并限制容器最多使用200M內(nèi)存和100M的交換分區(qū)
//--memory-swap:這個值是物理內(nèi)存加Swap的值
[root@3de51b7474c5 /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
209715200
//查看物理內(nèi)存是否生效,單位是字節(jié),可以自行進(jìn)行換算驗證
[root@3de51b7474c5 /]# cat /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes
314572800
//查看物理內(nèi)存和交換分區(qū)內(nèi)存是否生效,單位是字節(jié),這個值是物理內(nèi)存加Swap分區(qū)的值
block IO:磁盤的讀寫性能。
docker中可以通過設(shè)置權(quán)重,限制bps和iops的方式控制容器讀寫磁盤的IO。
常用的選項有:
- --device-read-bps:顯示讀取某個設(shè)備的bps;
- --device-write-bps:顯示寫入某個設(shè)備的bps;
- --device-read-iops:顯示讀取某個設(shè)備的iops;
- --device-write-iops:顯示寫入某個設(shè)備的iops;
默認(rèn)運(yùn)行一個容器,不對其進(jìn)行限制:
[root@3de51b7474c5 /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct
//oflag=direct用來指定directIO方式寫入文件,這樣才會使--device-write-bps生效,主要測試讀寫性能
800+0 records in
800+0 records out
838860800 bytes (839 MB) copied, 1.6379 s, 512 MB/s //不進(jìn)行限制,結(jié)果為每秒寫入512MB
real 0m2.022s
user 0m0.001s
sys 0m1.146s
[root@localhost ~]# docker run -it --name test5 --device-write-bps /dev/sda:30M centos:7
//創(chuàng)建一個容器對其限制為每秒為30M
[root@f5bd3f122881 /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct
800+0 records in
800+0 records out
838860800 bytes (839 MB) copied, 26.6317 s, 31.5 MB/s //雖然有點超出限制,但是并沒有限制強(qiáng)太多
real 0m26.633s
user 0m0.004s
sys 0m2.097s
———————— 本文至此結(jié)束,感謝閱讀 ————————
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁題目:Docker之Namespace與Cgroup-創(chuàng)新互聯(lián)
文章出自:http://www.ekvhdxd.cn/article36/djoepg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、標(biāo)簽優(yōu)化、品牌網(wǎng)站建設(shè)、ChatGPT、軟件開發(fā)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容