最近我在应用开源统计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参数以兼容模式来运行,否则限度不会失效
此文章首发于我的独立博客:https://blog.xiaoz.org/archives/18729