cgroup用來資源限制
包括cpu,內(nèi)存,磁盤三大方面
基本復(fù)寫了常見的資源配額和使用量控制
cgroup是controlgroup的縮寫
設(shè)置cpu使用率的上限
linux通過cfs(完全公平調(diào)度器)來調(diào)度各個(gè)進(jìn)程對cpu的使用,cfs默認(rèn)的調(diào)度周期是100ms
我們可以設(shè)置每個(gè)容器進(jìn)程的調(diào)度周期,以及再這個(gè)周期內(nèi)各個(gè)容器最多能使用cpu時(shí)間。
cpu分多少時(shí)間。
使用--cpu-period 即可設(shè)置一個(gè)cpu調(diào)度周期(使用上限),使用--cpu-quota 即可設(shè)置在每個(gè)周期內(nèi)容器能使用的cpu時(shí)間。兩者可配合使用。
?cd /sys/fs/cgroup/cpu/docker/容器目錄
設(shè)置cpu資源占用比(設(shè)置多個(gè)容器時(shí)才有效果)
--cpu-shares 1024
docker run -itd --name c1 --cpu-shares 1024 centos:7
docker run -itd --name c2 --cpu-shares 2048 centos:7
docker exec -it c1 bash
stress 多進(jìn)程壓測
兩個(gè)關(guān)掉一個(gè)容器另一個(gè)用所有資源
lscpu
docker ps -a
docker run -itd --name c3 --cpuset-cpus 1 centos:7
docker ps -a
docker exec -it c3 bash
yum install -y epel-release
yum -y install stress
Cgroup 資源限制
控制容器進(jìn)程對cpu,內(nèi)存,磁盤io 使用量的限制
docker run --cpu-period ?--cpu-quota 容器進(jìn)程使用cpu的使用率的上限
--cpu-period 1000~1000000
--cpu-quota >=1000
docker run --cpu-shares 1024的倍數(shù)#設(shè)置多個(gè)容器的cpu使用的占用比,只能在多個(gè)容器同時(shí)運(yùn)行時(shí)且資源緊張時(shí)有效
docker run --cpuset-cpus cpu編號 #設(shè)置容器綁定指定cpu,如多個(gè)cpu用逗號,間隔
2)對內(nèi)存使用的限制
//
?docker run -m 內(nèi)存大小 --memory-swap=內(nèi)存與swap的總大小
#=-1 不限制swap的使用,宿主機(jī)有多少可以用多少
#=0或不設(shè)置 swap為-m的兩倍
=與-m的值相同 則不適用swap
-m 512mb --memory-swap=2G 內(nèi)存512 swap 1.5G #限制容器的內(nèi)存和swap大小
1M=1mb
測試:
docker exec -it c4 sh
dd if=/dev/zero of/opt/test.txt bs =1M count=10 oflag=direct
exit
docker run -itd --name c2 --device-write-bps /dev/sda:1M centos:7
磁盤io讀寫限制
docker run --device-read-bps 磁盤設(shè)備文件名:速率(單位可以是 kb mb M gb) #限制容器在磁盤上讀的速率
docker run --device-write-bps 磁盤設(shè)備文件名:速率(單位可以是 kb mb M gb) #限制容器在磁盤上寫的速率
docker run --device-read-iops 磁盤設(shè)備文件名:次數(shù) #限制容器在磁盤上讀的速率
docker run --device-write-iops 磁盤設(shè)備文件名:次數(shù) #限制容器在磁盤上寫的速率
docker的鏡像創(chuàng)建(只讀模板文件,包含容器里應(yīng)用程序所需的所有內(nèi)容)
創(chuàng)建鏡像的三種方法:分別是為基于已有鏡像的創(chuàng)建,基于本地模板創(chuàng)建以及基于dockerfile創(chuàng)建
1)基于現(xiàn)有鏡像創(chuàng)建
首先啟動(dòng)一個(gè)鏡像,在鏡像做修改
然后修改后的同時(shí)提交為新的鏡像需要使用
鏡像文件網(wǎng)站
?創(chuàng)建容器的方法
1)基于現(xiàn)有鏡像創(chuàng)建
先使用現(xiàn)有鏡像創(chuàng)建容器 docker run
再進(jìn)入容器進(jìn)行內(nèi)容跟新 docker exec
最后提交成新的鏡像 docker commit docker export
+docker import導(dǎo)入
2)基于模板創(chuàng)建
可從本地容器導(dǎo)出模板文件 docker export或從網(wǎng)上下載現(xiàn)成的模板文件 http://openvz.org/Downlord/templete/precreated
再將模板文件導(dǎo)入成鏡像 docker import
3) dockerfile 構(gòu)建
docker鏡像架構(gòu)聯(lián)合文件系統(tǒng)架構(gòu)unionFS
支持對文件系統(tǒng)作為一次提交來一層層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)修文件系統(tǒng)下AUFS,overlayFS及devicemapper都是一種unionFS
bootfs加載宿主機(jī)的內(nèi)核
//鏡像加載原理
Docker的鏡像實(shí)際上由一層一層的文件系統(tǒng)組成,這種層級的文件系統(tǒng)就是UnionES。
bootfs主要包含bootloader和kernel,bootloader主要是引導(dǎo)加載kernel,Linux剛啟動(dòng)時(shí)會加載bootfs文件系統(tǒng)。
在Docker鏡像的最底層是bootfs,這一層與我們典型的Linx/unix系統(tǒng)是一樣的,包含boot 加載器和內(nèi)核。當(dāng)boot加載完成之后整個(gè)內(nèi)核就都在內(nèi)存中了,此時(shí)內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核,此時(shí)系統(tǒng)也會卸載bootfs。
rootfs,在bootfs之上。包含的就是典型Limx系統(tǒng)中的/dev,/proc,/bin,/etc等標(biāo)準(zhǔn)目錄和文件。rootfs就是各種不同的操作系統(tǒng)發(fā)行版,比如ubuntu,centos等等
我們回以理解成一開始內(nèi)核里什么都沒有,操作一個(gè)命今下我debian,這時(shí)就會在內(nèi)孩上面加了一層某礎(chǔ)鏡像:再安裝一個(gè)emacs,會在基礎(chǔ)鏡像上疊加一層image: 按著再安裝一apache。又會在images面加一image。最后它們看起來就像一文件系統(tǒng)即究賽的rootfs。在Docker的體系里把這些rootsr的境像。但是,此的每一層rootfs都是read-only的,我們此時(shí)還不能對其進(jìn)行作。當(dāng)我們創(chuàng)建一個(gè)容器,也就是將Docker鏡像進(jìn)行實(shí)例化,系統(tǒng)會在一層或是多層read-only的rootfs之上分配一層空的read-write的rootfs.
//為什么Docker里的centos的大小才200M?
因?yàn)閷τ诰喌腛S,工O0ts可以很小,只需要包含最基本的命令、工具和程序庫就可以了,因?yàn)榈讓又苯佑盟拗鳈C(jī)的Kaml,自己只需要提供rotfs就可以了。由此可見對于不同的linux發(fā)行版,bootfs基本是一致的,rootfs會有差別,因此不同的發(fā)行版可以公用bootfs。
//Dockerfile
Docker鏡像是一個(gè)特殊的文件系統(tǒng),除了提供容器運(yùn)行時(shí)所需的程序、庫、資源、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如置名卷、環(huán)境變量、用戶等)。鏡像不包含任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。
鏡像的定制實(shí)際上就是定制每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、檢建、操作的金今都寫入一個(gè)腳本,用這個(gè)制太夾構(gòu)建、定制接像,那么轉(zhuǎn)像構(gòu)建透明性的問題、體積的問題就都會解決。這個(gè)腳本就是 Dockerfile。
dockerfile是一個(gè)文本文件,其內(nèi)包含了一條條的指令 (Instruction),每一條指今構(gòu)建一層,因此每一條指令的內(nèi)容,就是捕述該層應(yīng)當(dāng)如何構(gòu)建。有了nockerfi1le,當(dāng)我們需要定制自己額外的需求時(shí),只需在Dockerfile上添加或者修改指令,重新生成 image 即可, 省去了敲命令的麻煩
rootfs包含標(biāo)準(zhǔn)目錄和文件(linux系統(tǒng))
docker inspect 產(chǎn)看詳細(xì)信息
可以理解成一開始內(nèi)核里什么都沒有,操作一個(gè)命令下載一個(gè)debian
dockerfile機(jī)構(gòu)包含四個(gè)部分,基礎(chǔ)鏡像信息,維護(hù)者信息,鏡像操作指令和容器啟動(dòng)時(shí)執(zhí)行指令.容器數(shù)據(jù)的持久化用數(shù)據(jù)卷.(# ;不管前面的命令是否成功都會執(zhí)行下一個(gè))
寫時(shí)復(fù)制技術(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-472357.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-472357.html
到了這里,關(guān)于docker cgroup資源占用及docker的鏡像創(chuàng)建的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!