docker compose 資源限制及驗證

使用場景

容器運行時默認是不限制資源使用的剑按,就是說容器可以盡可能的使用主機的資源源弦蹂;但是在多個容器運行時救恨,資源限制還是很有必要的缀匕,下面我們介紹一下在docker compose 管理的多容器使用場景:

  • 多容器應(yīng)用:在微服務(wù)架構(gòu)中纳决,多個服務(wù)同時運行,需確保每個服務(wù)的資源使用不影響其他服務(wù)乡小。
  • 性能測試:在進行壓力測試時阔加,限制資源使用可模擬實際運行環(huán)境,避免不必要的資源競爭满钟。
  • 開發(fā)環(huán)境:在本地開發(fā)中胜榔,資源限制有助于防止開發(fā)過程中的資源過度消耗。

演示環(huán)境配置

限制容器對CPU的使用

在沒有特殊說明的情況下湃番,會在同一目錄中操作夭织。

1. 創(chuàng)建容器壓測鏡像:

$ cat Dockerfile
FROM ubuntu:latest

RUN apt-get update && \
        apt-get install stress

CMD ["stress", "--cpu", "4", "--timeout", "600"]

stress --cpu 4 #模擬4個CPU核心的滿載負載
--timeout 600 #600秒后結(jié)束任務(wù)

2. 使用docker-compose啟動壓測服務(wù)

$ cat docker-compose.yaml
version: '3.8'

services:
  stress:
    build:
      context: .
    deploy:
      resources:
        limits:
          cpus: '5'
          memory: 2048M
        reservations:
          cpus: '1'
          memory: 1024M

配置說明:
YAML文件中,resources配置項可以限制容器的物理資源使用吠撮。配置如下:

  • limits:限制容器可使用的最大物理資源尊惰。
  • reservations:必須保證容器至少可以分配資源數(shù)量;以上配置是宿主機必須有1024m的內(nèi)存可分配給stress容器纬向,否則不啟動或啟動失敗择浊。

3. 驗證

根據(jù)以上兩步驟的配置啟動容器

$ docker compose up
[+] Running 1/1
 ? Container benchmark-stress-1  Recreated                                             0.1s
Attaching to stress-1
stress-1  | stress: info: [1] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd

使用docker stats可以看到CPU使用為400%

$ docker stats
CONTAINER ID   NAME                 CPU %     MEM USAGE / LIMIT   MEM %     NET I/O       BLOCK I/O   PIDS
6702255b11f7   benchmark-stress-1   399.91%   1.684MiB / 2GiB     0.08%     3.67kB / 0B   0B / 0B     5

然后我們將limit cpu改成“3”,再次啟動測試容器

## 修改resource limit cpu: 3
...    
    deploy:
      resources:
        limits:
          cpus: '3'
...

## 啟動測試容器
$ docker compose up
[+] Running 1/0
 ? Container benchmark-stress-1  Created                                                 0.0s
Attaching to stress-1
stress-1  | stress: info: [1] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd

## cpu使用300%
$ docker stats
CONTAINER ID   NAME                 CPU %     MEM USAGE / LIMIT   MEM %     NET I/O       BLOCK I/O   PIDS
f5be0d98f266   benchmark-stress-1   298.55%   1.051MiB / 2GiB     0.05%     3.14kB / 0B   0B / 0B     5

說明一下:
此處的298.55%不是說明使用了3個核,而是使用'stress --cpu 4'指定的4個核的總和的300%逾条,也就是4*75%=300%
使用top命令很容易看出來琢岩。

## 進入測試容器內(nèi)部
$ sudo docker compose exec stress bash

root@f5be0d98f266:/# top

top - 08:59:26 up 10 days,  2:05,  0 user,  load average: 4.03, 3.74, 2.59
Tasks:   7 total,   5 running,   2 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.2 us,  0.0 sy,  0.0 ni, 98.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem : 515748.2 total, 504690.7 free,   8700.2 used,   5422.7 buff/cache
MiB Swap:   2048.0 total,   2030.2 free,     17.8 used. 507048.1 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
     10 root      20   0    3620      0      0 R  74.6   0.0   3:41.51 stress
      7 root      20   0    3620      0      0 R  74.3   0.0   3:42.02 stress
      8 root      20   0    3620      0      0 R  74.3   0.0   3:41.54 stress
      9 root      20   0    3620      0      0 R  74.3   0.0   3:41.44 stress

可以分別將resource limit cpu改成2或4分別看一下top返回。

限制容器對內(nèi)存的使用

和CPU限制的方法一樣师脂,舉一反三

參考:

stress:https://www.geeksforgeeks.org/linux-stress-command-with-examples/
docker-compose: https://www.geeksforgeeks.org/linux-stress-command-with-examples/

結(jié)論

合理使用 Docker Compose 的資源限制功能担孔,能夠提升應(yīng)用的穩(wěn)定性和性能,降低成本吃警。通過有效的驗證手段糕篇,確保資源限制設(shè)置的有效性,是良好容器管理的關(guān)鍵酌心。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拌消,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子安券,更是在濱河造成了極大的恐慌墩崩,老刑警劉巖氓英,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鹦筹,居然都是意外死亡铝阐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門铐拐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徘键,“玉大人,你說我怎么就攤上這事遍蟋〈岛Γ” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵虚青,是天一觀的道長赠制。 經(jīng)常有香客問我,道長挟憔,這世上最難降的妖魔是什么钟些? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮绊谭,結(jié)果婚禮上政恍,老公的妹妹穿的比我還像新娘。我一直安慰自己达传,他們只是感情好篙耗,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宪赶,像睡著了一般宗弯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搂妻,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天蒙保,我揣著相機與錄音,去河邊找鬼欲主。 笑死邓厕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扁瓢。 我是一名探鬼主播详恼,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼引几!你這毒婦竟也來了昧互?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敞掘,沒想到半個月后屿储,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡渐逃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了民褂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茄菊。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赊堪,靈堂內(nèi)的尸體忽然破棺而出面殖,到底是詐尸還是另有隱情,我是刑警寧澤哭廉,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布脊僚,位于F島的核電站,受9級特大地震影響遵绰,放射性物質(zhì)發(fā)生泄漏辽幌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一椿访、第九天 我趴在偏房一處隱蔽的房頂上張望乌企。 院中可真熱鬧,春花似錦成玫、人聲如沸加酵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猪腕。三九已至,卻和暖如春钦勘,著一層夾襖步出監(jiān)牢的瞬間陋葡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工彻采, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脖岛,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓颊亮,卻偏偏與公主長得像柴梆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子终惑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容