限制容器對CPU的使用 - 每天5分鐘玩轉 Docker 容器技術(28)

2021-02-13 CloudMan

上節學習了如何限制容器對內存的使用,本節我們來看CPU。

默認設置下,所有容器可以平等地使用 host CPU 資源並且沒有限制。

Docker 可以通過 -c 或 --cpu-shares 設置容器使用 CPU 的權重。如果不指定,默認值為 1024。

與內存限額不同,通過 -c 設置的 cpu share 並不是 CPU 資源的絕對數量,而是一個相對的權重值。某個容器最終能分配到的 CPU 資源取決於它的 cpu share 佔所有容器 cpu share 總和的比例。

換句話說:通過 cpu share 可以設置容器使用 CPU 的優先級

比如在 host 中啟動了兩個容器:

docker run --name "container_A" -c 1024 ubuntu

docker run --name "container_B" -c 512 ubuntu


container_A 的 cpu share 1024,是 container_B 的兩倍。當兩個容器都需要 CPU 資源時,container_A 可以得到的 CPU 是 container_B 的兩倍。

需要特別注意的是,這種按權重分配 CPU 只會發生在 CPU 資源緊張的情況下。如果 container_A 處於空閒狀態,這時,為了充分利用 CPU 資源,container_B 也可以分配到全部可用的 CPU。

下面我們繼續用 progrium/stress 做實驗。

啟動 container_A,cpu share 為 1024: 

--cpu 用來設置工作線程的數量。因為當前 host 只有 1 顆 CPU,所以一個工作線程就能將 CPU 壓滿。如果 host 有多顆 CPU,則需要相應增加 --cpu 的數量。

啟動 container_B,cpu share 為 512: 

在 host 中執行 top,查看容器對 CPU 的使用情況: 

container_A 消耗的 CPU 是 container_B 的兩倍。

現在暫停 container_A: 

top 顯示 container_B 在 container_A 空閒的情況下能夠用滿整顆 CPU: 

CPU限額就討論到這裡,下一節我們將學習如何限制容器對 Block IO 帶寬資源的使用。

最好的讚賞是你的閱讀時間

相關焦點

  • 限制容器的 Block IO - 每天5分鐘玩轉 Docker 容器技術(29)
  • 初探 ELK - 每天5分鐘玩轉 Docker 容器技術(89)
    本節將討論如何用 ELK 這組黃金搭檔來監控 Docker 容器的日誌。我們的目標是在最短的時間內學習並實踐 ELK,因此將採用最小部署方案:在容器中搭建 ELK。docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk我們使用的是 sebp/elk 這個現成的 image,裡面已經包含了整個 ELK stack。
  • 部署 Graylog 日誌系統 - 每天5分鐘玩轉 Docker 容器技術(92)
    接下來我們將在容器環境下搭建 Graylog。部署 GraylogGraylog 及其相關組件都將以容器的方式部署。MongoDBdocker run --name graylog-mongo -d mongo:3Elasticsearchdocker run --name graylog-elasticsearch -d elasticsearch:2 elasticsearch -
  • ELK 完整部署和使用 - 每天5分鐘玩轉 Docker 容器技術(90)
    幾乎所有的軟體和應用都有自己的日誌文件,容器也不例外。前面我們已經知道 Docker 會將容器日誌記錄到 /var/lib/docker/containers/<contariner ID>/<contariner ID>-json.log,那麼只要我們能夠將此文件發送給 ELK 就可以實現日誌管理。
  • - 每天5分鐘玩轉 Docker 容器技術(93)
    首先啟動測試容器。          --log-opt tag="log-test-container-B" \           busybox sh -c 'while true; do echo "This is a log message from container B"; sleep 10; done;'--log-driver=gelf 告訴 Docker 使用
  • 配置 VirtualBox backend - 每天5分鐘玩轉 Docker 容器技術(74)
    在 VirtualBox 宿主機,即我的筆記本上啟動 vboxwebsrv 服務:vboxwebsrv -H 0.0.0.0執行如下命令關閉 VirtualBox 的登錄認證:VBoxManage setproperty websrvauthlibrary null在關機狀態下修改虛擬機 docker1 和 docker2
  • 在 Scale Up 中使用 Health Check - 每天5分鐘玩轉 Docker 容器技術(145)
    我們可以通過 Readiness 探測判斷容器是否就緒,避免將請求發送到還沒有 ready 的 backend。下面是示例應用的配置文件。重點關注 readinessProbe 部分。這裡我們使用了不同於 exec 的另一種探測方法 -- httpGet。
  • 一次搞明白 Docker 容器資源限制
    Docker提供了限制內存,CPU或磁碟IO的方法, 可以對容器所佔用的硬體資源大小以及多少進行限制,我們在使用docker create創建一個容器或者docker run運行一個容器的時候就可以來對此容器的硬體資源做限制。
  • 安裝 Docker Machine - 每天5分鐘玩轉 Docker 容器技術(45)
    >
  • 部署Prometheus Operator - 每天5分鐘玩轉 Docker 容器技術(179)
    本節在實踐時使用的是 Prometheus Operator 版本 v0.14.0。
  • 跨主機網絡概述 - 每天5分鐘玩轉 Docker 容器技術(48)
    前面已經學習了 Docker 的幾種網絡方案:none、host、bridge 和 joined 容器,它們解決了單個 Docker Host 內容器通信的問題。跨主機網絡方案包括:docker 原生的 overlay 和 macvlan。第三方方案:常用的包括 flannel、weave 和 calico。docker 網絡是一個非常活躍的技術領域,不斷有新的方案開發出來,那麼要問個非常重要的問題了:如此眾多的方案是如何與 docker 集成在一起的?
  • 一分鐘玩轉Docker容器化部署
    隨著以Docker為代表的容器化技術的普及,目前Devops實踐大多會採用容器(如Docker、K8s)這樣的方式來作為微服務應用部署運行的載體,並通過容器的彈性擴展來實現快速擴容和縮容,從而更快地響應業務、更好地利用資源。
  • 萬能數據收集器 Fluentd - 每天5分鐘玩轉 Docker 容器技術(91)
    容器日誌,利用的是 Docker 默認的 logging driver json-file,本節我們將使用 fluentd 來收集容器的日誌。安裝 Fluentd同樣的,最高效的實踐方式是運行一個 fluentd 容器。
  • 如何搞懂容器的核心技術點?
    容器技術的核心功能,就是通過約束和修改進程的動態表現,創造出一個「邊界」,通過「障眼法」讓人覺得它是一個獨立的系統。大多數容器都是使用 Cgroups 技術來約束進程,通過 Namespace 技術來修改進程的視圖。
  • 【每天30分鐘Get新技能】docker容器篇(一)
    Ubuntu 發行版中,LTS(Long-Term-Support)長期支持版本,會獲得 5 年的升級維護支持,這樣的版本會更穩定,因此在生產環境中推薦使用 LTS 版本。2) docker container ls用於列出所有在運行(UP)狀態的容器。如果使用 -a 標記,還可以看到處於停止(Exited)狀態的容器。3) docker container exec用於在運行狀態的容器中,啟動一個新進程。該命令在將 Docker 主機 Shell 連接到一個運行中容器終端時非常有用。
  • Docker容器狀態命令行工具——Ctop
    cpu、內存、網絡的使用情況。/usr/local/bin/$ sudo chmod +x /usr/local/bin/ctop$ docker run -ti --name ctop --rm -v /var/run/docker.sock:/var/run/docker.sock quay.io/vektorlab/ctop:latest使用
  • docker容器操作命令:目錄掛載與安裝MySQL容器詳解
    今天為大家分享的主題:docker容器操作命令:目錄掛載(卷Volume)、使用Docker安裝MySQL容器,歡迎大家一起來閱讀哦!
  • 技術乾貨 | Docker 容器逃逸案例匯集
    --rm -it \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ ubuntu \ /bin/bash漏洞測試:1、在容器中找到docker.sockroot@95a280bc5a19
  • 微服務中的容器技術---Docker(一),Docker的安裝和使用
    概述在微服系統中,因為服務特別多,如果手動部署以及啟動、重啟等工作會比較繁瑣,這裡會涉及到自動化部署,自動化部署就需要用到容器技術
  • Docker 工作原理及容器化簡易指南
    在容器內運行的應用程式僅可使用於為該容器分配的資源,例如:CPU,內存,磁碟,進程空間,用戶,網絡,卷等。在使用有限的容器資源的同時,並不與其他容器衝突。您可以將容器視為簡易計算機上運行應用程式的隔離沙箱。這個概念聽起來很熟悉,有些類似於虛擬機。但它們有一個關鍵的區別:容器使用的一種非常不同的,輕量的技術來實現資源隔離。