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

科技资讯 投稿 19200 0 评论

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

docker-compose进行部署,于是打算使用docker-compose限制下容器的CPU和内存使用来解决这个问题。

吐槽

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

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

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

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

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

验证

docker stats查看容器资源使用情况:

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

总结

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

编程笔记 » 如何在Docker Compose中限制容器的CPU和内存使用

赞同 (91) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽