4ff6889d27f1ea201dface490a96be64.png

最近在使用docker的过程中,发现CPU和内存经常占满,导致其它服务都不能正常使用。下面本文就探讨一下如何使用docker-compose限制内存和cpu的。本文以docker-compose.yml中version 3.x为主,最后也会给一下2.X的示例。

内存和CPU限制

yml文件添加 service.deploy内容如下:

version: '3'  
services:  
  web:  
    image: nginx  
    deploy:  
      resources:
        #第一种方式  
        limits:  
          cpus: '0.50'  
          memory: 512M
        #第二种方式
        reservations:
          memory: 200M

注意:reservations中不支持cpus,仅支持内存。

以ldap为例:

version: '3.7'
services:
  openldap:
    image: 10.10.239.54/public/openldap:1.3.0
    container_name: openldap
    environment:
      - N9E_NID=22
    ports:
      - "389:389"
      - "636:636"
    deploy:
      resources:
         limits:
           cpus: "2.00"
           memory: 5G
         reservations:
            memory: 200M
    volumes:
      - ./ldap:/var/lib/ldap
      - ./slapd.d:/etc/ldap/slapd.d
    restart: always
  • 启动容器

限制指令为deploy.resources.limits这部分,注意节点位置,上面这部分限制的含义是:openldap服务的CPU使用被限制在最多200%的CPU能力,内存使用被限制在最多5GB。同时,这个服务至少需要200MB的内存。

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

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

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

验证

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

docker-compose 2.x如何限制?

第2版的限制方式,还是比较简单的,这里给个示例,供大家参考

version: '2'  
services:  
  web:  
    build: .  
    mem_limit: 512m  # 限制内存使用为512MB  
    cpus: '0.5'     # 限制CPU使用为0.5个核心


总结

  • docker-compose.yml限制内存需要添加deploy.resources.limits节点

  • docker-compose命令启动的时候需要添加--compatibility参数以兼容模式来运行,否则限制不会生效

以上就是Docker Compose中限制容器的CPU和内存使用的全部内容。

GitHub 加速计划 / compose / compose
33.26 K
5.15 K
下载
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
最近提交(Master分支:1 个月前 )
16652ed2 Signed-off-by: Alexandr Hacicheant <a.hacicheant@gmail.com> 2 天前
c6a76b9b full diff: https://github.com/docker/buildx/compare/v0.17.0...v0.17.1 Signed-off-by: Sebastiaan van Stijn <github@gone.nl> 2 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐