Docker容器與虛擬化技術:Docker資源控制、數據管理

目錄

一、理論

1.資源控制

2.Docker數據管理

二、實驗

1.Docker資源控制

2.Docker數據管理?

三、問題

1.docker容器故障導致大量日志集滿,造成磁盤空間滿

2、當日志占滿之后如何處理

四、總結


一、理論

1.資源控制

(1)??CPU 資源控制

?? cgroups,是一個非常強大的linux內核工具,他不僅可以限制被 namespace 隔離起來的資源, 還可以為資源設置權重、計算使用量、操控進程啟停等等。 所以 cgroups( Control groups) 實現了對資源的配額和度量。

(2)cgroups四大功能

●資源限制:可以對任務使用的資源總額進行限制●優先級分配:通過分配的cpu時間片數量以及磁盤IO帶寬大小,實際上相當于控制了任務運行優先級●資源統計:可以統計系統的資源使用量,如cpu時長,內存用量等●任務控制:cgroup可以對任務執行掛起、恢復等操作

(3)??設置CPU使用率上限

? ? Linux 通過 CFS(Completely Fair Scheduler,完全公平調度器)來調度各個進程對 CPU 的使用。CFS 默認的調度周期是 100ms。(10萬微秒)

? ? ? ? 我們可以設置每個容器進程的調度周期,以及在這個周期內各個容器最多能使用多少 CPU 時間。

? ? ? ? 使用 --cpu-period 即可設置調度周期,使用 --cpu-quota 即可設置在每個周期內容器能使用的 CPU 時間。兩者可以配合使用。

? ? ? ? CFS 周期的有效范圍是 1ms~1s,對應的 --cpu-period 的數值范圍是 1000~100000。

? ? ? ? 而容器的 CPU 配額必須不小于 1ms,即 --cpu-quota 的值必須 >= 1000。

啟用一臺容器:
?

docker run -itd --name test1 centos:7 /bin/bash

cpu.cfs_period_us:cpu分配的周期(微秒,所以文件名中用 us 表示),默認為100000。

cpu.cfs_quota_us:表示該control group限制占用的時間(微秒),默認為-1,表示不限制。 如果設為50000,表示占用50000/100000=50%的CPU。
?

①進行CPU壓力測試

編寫一個腳本:

docker exec -it 3ed82355f811 /bin/bash
vim /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

運行:

chmod +x /cpu.sh
./cpu.sh
exit

②設置50%的比例分配CPU使用時間上限

docker run -itd --name test2 --cpu-quota 50000 centos:7 /bin/bash	#可以重新創建一個容器并設置限額
或者
cd /sys/fs/cgroup/cpu/docker/3ed82355f81151c4568aaa6e7bc60ba6984201c119125360924bf7dfd6eaa42b/
echo 50000 > cpu.cfs_quota_us
docker exec -it 3ed82355f811 /bin/bash
./cpu.sh
exit

(4)??設置CPU資源占用比(設置多個容器時才有效)

Docker 通過--cpu-shares 指定 CPU 份額,默認值為1024,值為1024的倍數。

例:

? ? ? ? 創建兩個容器為 c1 和 c2,若只有這兩個容器,設置容器的權重,使得c1和c2的CPU資源占比為1/3和2/3。

docker run -itd --name c1 --cpu-shares 512 centos:7	
docker run -itd --name c2 --cpu-shares 1024 centos:7

分別進入容器,進行壓力測試

yum install -y epel-release
yum install stress -y
stress -c 4	

(5)設置容器綁定指定的CPU

先分配虛擬機4個CPU核數

創建容器

docker run -itd --name cc1 --cpuset-cpus 1,3 centos:7 /bin/bash

進入容器,進行壓力測試

yum install -y epel-release
yum install stress -y
stress -c 4
exit

退出容器,執行 top 命令再按 1 查看CPU使用情況

(6)?對磁盤IO配額控制(blkio)的限制

--device-read-bps:限制某個設備上的讀速度bps(數據量),單位可以是kb、mb(M)或者gb。

例:

docker run -itd --name test4 --device-read-bps /dev/sda:1M  centos:7 /bin/bash

--device-write-bps : 限制某個設備上的寫速度bps(數據量),單位可以是kb、mb(M)或者gb。

例:

docker run -itd --name test5 --device-write-bps /dev/sda:1M centos:7 /bin/bash

--device-read-iops :限制讀某個設備的iops(次數)
?
--device-write-iops :限制寫入某個設備的iops(次數)

創建容器,并限制寫速度

docker run -it --name cc3 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

通過dd來驗證寫速度

dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct				#添加oflag參數以規避掉文件系統cache

2.Docker數據管理

(1)數據卷

?數據卷是一個供容器使用的特殊目錄,位于容器中。可將宿主機的目錄掛載到數據卷上,對數據卷的修改操作立刻可見,并且更新數據不會影響鏡像,從而實現數據在宿主機與容器之間的遷移。數據卷的使用類似于Linux下對目錄進行的mount操作。

例:

先下載一個鏡像

docker pull centos:7

宿主機目錄/var/www掛載到容器中的/data1。

注意:宿主機本地目錄的路徑必須是使用絕對路徑。如果路徑不存在,Docker會自動創建相應的路徑。

docker run -V /var/www:/data1 --name web1 -it centos:7 /bin/bash
#-v選項可以在容器內創建數據卷ls
echo "this is cc1" > /data1/abc.txt
exit#返回宿主機進行查看
cat /var/www/abc.txt

(2)數據卷容器

如果需要在容器之間共享一些數據,最簡單的方法就是使用數據卷容器。數據卷容器是一個普通的容器,專門提供數據卷給其他容器掛載使用。

例:

創建一個容器作為數據卷容器

docker run --name web2 -v /data1 -v /data2 -it centos:7 /bin/bash
echo "this is web2" > /data1/abc.txt
echo "THIS IS WEB2" > /data2/ABC.txt

使用 --volumes-from來掛載web2容器中的數據卷到新的容器

docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
cat /data1 /abc.txt
cat /data2/ABC.txt

(3)端口映射

在啟動容器的時候,如果不指定對應的端口,在容器外是無法通過網絡來訪問容器內的服務。端口映射機制將容器內的服務提供給外部網絡訪問,實質上就是將宿主機的端口映射到容器中,使得外部網絡訪問宿主機的端口便可訪問容器內的服務。

docker run -d --name test1 -P nginx
#隨機映射端口( 從32768開始)
docker run -d --name test2 -p 43000:80 nginx
#指定映射端口

?(4)容器互聯(使用centos鏡像)

容器互聯是通過容器的名稱在容器間建立一條專門的網絡通信隧道。簡單點說,就是會在源容器和接收容器之間建立一條隧道,接收容器可以看到源容器指定的信息

例:

docker run -itd -P --name xx1 centos:7 /bin/bash

創建并運行接收容器取名xx2,使用--1ink選項指定連接容器以實現容器互聯

docker run -itd -P --name xx2 --link xx1:xx2 centos:7 /bin/bash

進xx2容器,ping xxl

docker exec -it xx2 bash

二、實驗

1.Docker資源控制

(1)設置CPU使用率上限

進行CPU壓力測試

編寫一個腳本:

?

?查看腳本占用CPU資源

?設置50%的比例分配CPU使用時間上限

?可以看到CPU占用率接近50%,cgroups對CPU的控制起了效果

?(2)設置CPU資源占用比(設置多個容器時才有效)

創建兩個容器為 c1 和 c2,若只有這兩個容器,設置容器的權重,使得c1和c2的CPU資源占比為1/3和2/3。

?分別進入容器,進行壓力測試

容器c1

?

?容器c2

?查看容器運行狀態(動態更新)

CPU總和是400%。因為虛擬機使用的是4核,而且C1和C2的CPU使用百分比約為1:2

?(3)設置容器綁定指定的CPU

已分配虛擬機4個CPU核數

?創建容器

只允許cc1容器使用第2個和第4個CPU

?

?進入容器

安裝依賴包

?安裝壓力測試工具

??進行壓力測試

?執行 top 命令

?再按 1 查看CPU使用情況,只有第2個和第4個CPU被使用

?(4)對磁盤IO配額控制(blkio)的限制

創建容器,并限制寫速度

可以看到寫的速度被限制了

清理docker占用的磁盤空間:

用于清理磁盤,刪除關閉的容器、無用的數據卷和網絡

2.Docker數據管理?

(1)?數據卷

先下載一個鏡像

?宿主機目錄/var/www掛載到容器中的/data1。

注意:宿主機本地目錄的路徑必須是使用絕對路徑。如果路徑不存在,Docker會自動創建相應的路徑。

文件內容一樣

?(2)數據卷容器

創建一個容器作為數據卷容器

使用 --volumes-from來掛載web2容器中的數據卷到新的容器

?是在上一個容器創建的文件,說明掛載成功

?(3)端口映射

? 在啟動容器的時候,如果不指定對應的端口,在容器外是無法通過網絡來訪問容器內的服務。端口映射機制將容器內的服務提供給外部網絡訪問,實質上就是將宿主機的端口映射到容器中,使得外部網絡訪問宿主機的端口便可訪問容器內的服務。

?

?

?(4)??容器互聯(使用centos鏡像)

容器互聯是通過容器的名稱在容器間建立一條專門的網絡通信隧道。簡單點說,就是會在源容器和接收容器之間建立一條隧道,接收容器可以看到源容器指定的信息

創建并運行源容器取名xx1

?創建并運行接收容器取名xx2,使用--1ink選項指定連接容器以實現容器互聯

?進xx2容器,ping xxl

三、問題

1.docker容器故障導致大量日志集滿,造成磁盤空間滿

(1)解決方案
清除日志

#!/bin/bash
logs=$ (find /var/lib/docker/containers/ -name *-json.log*)
for log in $logs
do
cat /dev/null > $log
done

2、當日志占滿之后如何處理

###設置docker日志文件數量及每個日志大小vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"log-driver": "json-file", ? #我的一日志格式
"log-opts": { "max-size" : "500m", "max-file" : "3"} ? 日志的參數最大500M ? 我最大容器中有三個日志文件 每個日志文件大小是500M
}
修改完需要重新加載 ?systemctl daemon-reload

四、總結

清理docker占用的磁盤空間:

docker system prune -a			#可以用于清理磁盤,刪除關閉的容器、無用的數據卷和網絡

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39054.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39054.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39054.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Vue Uniapp MES生產執行管理系統

本MES系統是一款B/S結構、通用的生產執行管理系統,功能強大! 系統基于多年離散智造行業的業務經驗組建,主要目的是為國內離散制造業的中小企業提供一個專業化、通用性、低成本的MES系統解決方案。 聯系作者獲取

Linux(進程控制)

進程控制 進程創建fork函數初識fork函數返回值寫時拷貝fork常規用法fork調用失敗的原因 進程終止進程退出碼進程常見退出方法 進程等待進程等待必要性獲取子進程status進程等待的方法 阻塞等待與非阻塞等待阻塞等待非阻塞等待 進程替換替換原理替換函數函數解釋命名理解 做一個…

re學習(32)【綠城杯2021】babyvxworks(淺談花指令)

鏈接:https://pan.baidu.com/s/1msA5EY_7hoYGBEema7nWwA 提取碼:b9xf wp:首先找不到main函數,然后尋找特殊字符串, 交叉引用 反匯編 主函數在sub_3D9當中,但是IDA分析錯了 分析錯誤后,刪除函數 創建函數 操…

【Linux】多線程1——線程概念與線程控制

文章目錄 1. 線程概念什么是線程Linux中的線程線程的優點線程的缺點線程的獨立資源和共享資源 2. 線程控制Linux的pthread庫用戶級線程 📝 個人主頁 :超人不會飛)📑 本文收錄專欄:《Linux》💭 如果本文對您有幫助&…

無腦入門pytorch系列(三)—— nn.Linear

本系列教程適用于沒有任何pytorch的同學(簡單的python語法還是要的),從代碼的表層出發挖掘代碼的深層含義,理解具體的意思和內涵。pytorch的很多函數看著非常簡單,但是其中包含了很多內容,不了解其中的意思…

SpringBoot復習:(46)全局的bean懶加載是怎么實現的?

在application.properties中配置: spring.main.lazy-initializationtrue在運行SpringApplication的run方法時,代碼如下: 其中調用了prepareContext,prepareContext代碼如下: 當在配置文件中配置了spring.main.lazy-initializat…

JavaScript實現在線Excel的附件上傳與下載

摘要:本文由葡萄城技術團隊于CSDN原創并首發。轉載請注明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 前言 在本地使用Excel時,經常會有需要在Excel中添加一些附件文件的需求&am…

Clickhouse基于文件復制寫入

背景 目前clickhouse社區對于數據的寫入主要基于文件本地表、分布式表方式為主,但缺乏大批量快速寫入場景下的數據寫入方式,本文提供了一種基于clickhouse local 客戶端工具分布式處理hdfs數據表文件,并將clickhouse以文件復制的方式完成寫入…

解決并發沖突:Java實現MySQL數據鎖定策略

在并發環境下,多個線程同時對MySQL數據庫進行讀寫操作可能會導致數據沖突和不一致的問題。為了解決這些并發沖突,我們可以采用數據鎖定策略來保證數據的一致性和完整性。下面將介紹如何使用Java實現MySQL數據鎖定策略,以及相關的注意事項和最…

開源低代碼平臺Openblocks

網友 HankMeng 想看低代碼工具,正好手上有一個; 什么是 Openblocks ? Openblocks 是一個開發人員友好的開源低代碼平臺,可在幾分鐘內構建內部應用程序。 傳統上,構建內部應用程序需要復雜的前端和后端交互,…

如何保證微信小游戲存檔不丟失?

引言 微信小游戲的興起為玩家提供了一個輕松便捷的娛樂方式,然而,存檔丟失問題一直以來都是開發者和玩家關注的焦點。為了確保玩家的游戲體驗和投入能夠得到充分的保障,開發團隊需要采取一系列方法來保障微信小游戲存檔不丟失。本文將介紹一…

學習筆記十五:基于YUM文件運行POD應用

基于YUM文件運行POD應用 通過資源清單文件創建第一個Pod更新資源清單文件查看pod是否創建成功查看pod的ip和pod調度到哪個節點上假如pod里有多個容器,進入到pod里的指定容器查看pod詳細信息查看pod具有哪些標簽:刪除pod通過kubectl run創建Pod Pod資源清…

word之插入尾注+快速回到剛才編輯的地方

1-插入尾注 在編輯文檔時,經常需要對一段話插入一段描述或者附件鏈接等,使用腳注經常因占用篇幅較大導致文檔頁面內容雜亂,這事可以使用快捷鍵 ControlaltD 即可在 整個行文的末尾插入尾注,這樣文章整體干凈整潔,需…

【枚舉邊+MST+組合計數】CF1857G

Problem - 1857G - Codeforces 題意: 思路: 首先觀察一下樣例: 可以發現對于每一對點,貢獻是 s - 這對點對應的環的最大邊 1 那么這樣就有了 n^2 的做法 然后,根據慣用套路,枚舉樹上的點對問題可以轉…

Prometheus的搭建與使用

一、安裝Prometheus 官網下載地址:Download | Prometheus 解壓:tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名: mv prometheus-2.19.2.linux-amd64 /home/prometheus進入對應目錄: cd /home/prometheus查看配置文件&am…

淺析市面電商CRM系統|排單系統存在的不足

筆者做CRM尤其是電商CRM系統7年,相信我的分享能夠幫助大家對電商CRM有個清晰的認知。 系統本身是用來提升效率的,針對不少電商賣家或服務商,都有使用CRM系統來管理粉絲鏈接與營銷、銷售推廣等環節,來實現完整的CRM鏈路。尤其是在當…

OpenCV-Python中的圖像處理-傅里葉變換

OpenCV-Python中的圖像處理-傅里葉變換 傅里葉變換Numpy中的傅里葉變換Numpy中的傅里葉逆變換OpenCV中的傅里葉變換OpenCV中的傅里葉逆變換 DFT的性能優化不同濾波算子傅里葉變換對比 傅里葉變換 傅里葉變換經常被用來分析不同濾波器的頻率特性。我們可以使用 2D 離散傅里葉變…

2308C++對稱轉移

原文 了解對稱轉移 協程組提供了個編寫異步代碼的絕妙方法,與同步代碼一樣.只需要在合適地點加上協待,編譯器就會負責掛起協程,跨掛起點保留狀態,并在操作完成后恢復協程. 但是,最初有個令人討厭的限制,如果不小心,很容易導致棧溢出.如果想避免它,則必須引入額外同步成本,以…

Unity Spine幀事件

SpinePro中添加事件幀 首先 選中右上角的層級樹 然后選擇事件選項 最后在右下角看到 新建 點擊它 新建一個事件 點擊左上角的設置按鈕 彈出編輯窗口 編輯窗口 在右上角 動畫欄 可以切換對應的動畫 點坐邊的那個小灰點來切換 亮點代表當前動畫 選中幀 添加事件 點擊對應事件…

突破防線!泛微OA任意文件上傳Getshell

子曰:“巧言令色,鮮矣仁。” 漏洞復現 訪問漏洞url: 存在漏洞的路徑為 /weaver/weaver.common.Ctrl/.css?arg0com.cloudstore.api.service.Service_CheckApp&arg1validateApp漏洞利用: 漏洞證明: 文筆生疏&…