Docker?Compose中如何限制容器的CPU和內(nèi)存使用
正文
最近我在使用開(kāi)源統(tǒng)計(jì)Umami過(guò)程中,發(fā)現(xiàn)CPU和內(nèi)存經(jīng)常占滿,導(dǎo)致其它服務(wù)都不能正常使用。Umami我使用的docker-compose進(jìn)行部署,于是打算使用docker-compose限制下容器的CPU和內(nèi)存使用來(lái)解決這個(gè)問(wèn)題。

吐槽
于是我就去搜索相關(guān)文檔尋找限制容器資源使用率的方法,給我的感覺(jué)是Docker官方在設(shè)計(jì)docker-compose的時(shí)候有點(diǎn)混亂。
- 首先是
docker-compose的版本分1.x和2.x不同版本特性不一樣 docker-compose.yaml里面的version又分多個(gè)版本(1.x-3.x),不同的版本特性不一樣- 官方似乎沒(méi)有明確的文檔指名各版本的區(qū)別,而且升級(jí)版本的速度還賊快
docker-compose限制CPU和內(nèi)存
我直接貼出Umami的完整docker-compose.yaml內(nèi)容:
---
version: '3'
services:
umami:
image: docker.umami.dev/umami-software/umami:mysql-latest
deploy:
resources:
limits:
cpus: '0.50'
memory: 500M
reservations:
cpus: '0.25'
memory: 200M
ports:
- "3000:3000"
environment:
DATABASE_URL: mysql://umami:xxx@127.0.0.1:3306/umami
DATABASE_TYPE: mysql
HASH_SALT: replace-me-with-a-random-string
restart: always
network_mode: "host"限制指令為deploy.resources.limits這部分,注意節(jié)點(diǎn)位置,上面這部分限制的含義是:
Umami服務(wù)的CPU使用被限制在最多50%的CPU能力,內(nèi)存使用被限制在最多500MB。同時(shí),這個(gè)服務(wù)至少需要25%的CPU和200MB的內(nèi)存。
我們啟動(dòng)的時(shí)候命令需要發(fā)生一些變化,否則不會(huì)生效:
#原本的啟動(dòng)命令為 docker-compse up -d # 需要添加一個(gè)參數(shù)--compatibility表示以兼容模式來(lái)運(yùn)行 docker-compose --compatibility up -d
這里的關(guān)鍵在于添加--compatibility參數(shù)以兼容模式來(lái)運(yùn)行,否則限制不會(huì)生效。
驗(yàn)證
通過(guò)上述方法限制容器CPU和內(nèi)存后,再繼續(xù)使用命令:docker stats查看容器資源使用情況:

可以看到umami這個(gè)容器被成功限制為500MB內(nèi)存。
總結(jié)
- docker-compose的版本設(shè)計(jì)非?;靵y,且沒(méi)找到明確的官方特性對(duì)比說(shuō)明
docker-compose.yaml限制內(nèi)存需要添加deploy.resources.limits節(jié)點(diǎn)docker-compose命令啟動(dòng)的時(shí)候需要添加--compatibility參數(shù)以兼容模式來(lái)運(yùn)行,否則限制不會(huì)生效
以上就是Docker Compose中限制容器的CPU和內(nèi)存使用?的詳細(xì)內(nèi)容,更多關(guān)于Docker Compose限制CPU的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker的文件系統(tǒng)映射:主機(jī)與容器間目錄的雙向映射詳解
通過(guò)Docker的目錄映射功能,實(shí)現(xiàn)主機(jī)與容器間的數(shù)據(jù)共享與持久化存儲(chǔ),使用-v或--mount參數(shù)在運(yùn)行時(shí)設(shè)置主機(jī)與容器目錄映射,或通過(guò)DockerCompose配置文件實(shí)現(xiàn)自動(dòng)化,此功能提升數(shù)據(jù)管理靈活性和效率2024-11-11
docker配置靜態(tài)ip的實(shí)現(xiàn)示例
如果不配置會(huì)docker會(huì)自動(dòng)分配ip地址給容器,但是每次重啟后ip地址會(huì)改變,本文主要介紹了docker配置靜態(tài)ip的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
淺談Docker run 容器處于created狀態(tài)問(wèn)題
這篇文章主要介紹了解決Docker run 容器處于created狀態(tài)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Docker 啟動(dòng)Redis 并設(shè)置密碼的操作
這篇文章主要介紹了Docker 啟動(dòng)Redis 并設(shè)置密碼的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Docker images導(dǎo)出和導(dǎo)入操作
這篇文章主要介紹了Docker images導(dǎo)出和導(dǎo)入操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03

