阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

34次阅读
没有评论

共计 1264 个字符,预计需要花费 4 分钟才能阅读完成。




本站提供 Linux 服务器运维,自动化脚本编写等服务,如有需要请联系博主微信:xiaozme

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

吐槽

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

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

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 内存。

总结

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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1264字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中