龙空技术网

如何在Docker Compose中限制容器的CPU和内存使用?

IT小英雄 250

前言:

现在看官们对“服务主机本地服务网络受限占cpu”大概比较看重,朋友们都想要学习一些“服务主机本地服务网络受限占cpu”的相关知识。那么小编也在网摘上搜集了一些对于“服务主机本地服务网络受限占cpu””的相关内容,希望看官们能喜欢,朋友们一起来学习一下吧!

最近我在使用开源统计Umami过程中,发现CPU和内存经常占满,导致其它服务都不能正常使用。Umami我使用的docker-compose进行部署,于是打算使用docker-compose限制下容器的CPU和内存使用来解决这个问题。

吐槽

于是我就去搜索相关文档寻找限制容器资源使用率的方法,给我的感觉是Docker官方在设计docker-compose的时候有点混乱。

首先是docker-compose的版本分1.x2.x不同版本特性不一样docker-compose.yaml里面的version又分多个版本(1.x-3.x),不同的版本特性不一样官方似乎没有明确的文档指名各版本的区别,而且升级版本的速度还贼快docker-compose限制CPU和内存

我直接贴出Umami的完整docker-compose.yaml内容:

---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这部分,注意节点位置,上面这部分限制的含义是:

Umami服务的CPU使用被限制在最多50%的CPU能力,内存使用被限制在最多500MB。同时,这个服务至少需要25%的CPU和200MB的内存。

我们启动的时候命令需要发生一些变化,否则不会生效:

#原本的启动命令为docker-compse up -d# 需要添加一个参数--compatibility表示以兼容模式来运行docker-compose --compatibility up -d

这里的关键在于添加--compatibility参数以兼容模式来运行,否则限制不会生效。

验证

通过上述方法限制容器CPU和内存后,再继续使用命令:docker stats查看容器资源使用情况:

可以看到umami这个容器被成功限制为500MB内存。

总结docker-compose的版本设计非常混乱,且没找到明确的官方特性对比说明docker-compose.yaml限制内存需要添加deploy.resources.limits节点docker-compose命令启动的时候需要添加--compatibility参数以兼容模式来运行,否则限制不会生效

标签: #服务主机本地服务网络受限占cpu