科技博览

导航菜单



当前位置: 首页  /  科技  /  正文

Docker Compose中限制容器的CPU和内存使用的最佳实践

阅读:29

Docker Compose中限制容器的CPU和内存使用的最佳实践

最近我在使用开源统计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参数以兼容模式来运行,否则限制不会生效

标签

DockerCompose限制容器CPU内存使用


相关文章列表

每日一招:快速解决docker-compose: command not found问题

每日一招:快速解决docker-compose: command not found问题

每日一招,每日掌握一个要点,日积月累的沉淀,是厚积薄发的积累 只有日积月累的沉淀,才有厚积薄发的成长。虽然成为不了大神,大牛,但......


Docker容器虚拟化技术

Docker容器虚拟化技术

小伙伴儿们,如果觉得文章干货满满,欢迎加入公众号【编程识堂】,更多干货等着你们来哦!docker官网命令地址Docker命令分类......


预算1500元左右,这4款“8+256GB”大内存手机,日常使用无压力!

预算1500元左右,这4款“8+256GB”大内存手机,日常使用无压力!

#头条创作挑战赛#您在阅读前请点击上面的“关注”二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。在购买手机的时候......


Java对象使用后设置为null会减少内存占用吗?

Java对象使用后设置为null会减少内存占用吗?

摘要:4种查看java对象所占内存大小的方法计算java对象所占内存大小1.使用jdk8自带API使用这种jdk8方式时,Open JDK 不是天然支持的,需要设置一下环境变量结果如下:2. 借助or...


华硕笔记本新技术亮相:CPU、内存芯片整合为一体

华硕笔记本新技术亮相:CPU、内存芯片整合为一体

近日,在华硕2023年春季笔记本新品发布会上,华硕笔记本一项新技术亮相。该技术名为“华硕超高速系统模组”,可将CPU、内存芯片整合为一体,节省38%的核心主板面积,使笔记本能容纳更为高端的显卡和散热组...


光威推出单条24GB DDR5内存:全白散热马甲,6000MHz,售价419元

光威推出单条24GB DDR5内存:全白散热马甲,6000MHz,售价419元

目前市场上能提供单条容量24GB和48GB DDR5内存的厂商比较少,仅有芝奇、美商海盗船和英睿达。其中美商海盗船的产品前一段时......


友情链接