繁体   English   中英

限制Docker组合中可用的主机资源而无群

[英]Limit useable host resources in Docker compose without swarm

我只是想在docker-compose文件中限制某些Docker容器的资源。 原因很简单:主机上正在运行多个应用程序/服务。 因此,我想避免一个容器可以使用例如所有内存,而这会损害其他容器。

从我学到的文档中,可以使用resources完成此操作。 但这超出了deploy 所以我必须像下面的例子一样写我的docker-compose文件:

  php:
    image: php:7-fpm
    restart: always
    volumes:
      - ./www:/www
    deploy:
      resources:
        limits:
          memory: 512M

这给了我警告:

警告:某些服务(php)使用'deploy'键,该键将被忽略。 Compose不支持部署配置-使用docker stack deploy部署到集群。

这似乎是正确的: docker stats确认,该容器能够使用主机中的所有ram。

该文件说:

指定与服务的部署和运行有关的配置。 这仅在通过docker stack deploy部署到集群时才生效,并且被docker-compose up和docker-compose run忽略。

但是我不需要集群。 似乎没有其他方法可以使用docker composer文件来限制资源。 为什么无法像docker run中那样指定某种memory标签(如start-parameter)?

示例: docker run --memory=1g $imageName

这非常适合单个容器。 但是我不能使用它(至少不违反关注点的清晰区分),因为我需要使用两个不同的容器。

编辑:临时解决方法

我发现,从版本3降级到版本2后,我可以直接使用mem_limit (将version: '2'放在顶部)。 但是我们当前使用的是3.1版,因此这不是一个长期的解决方案。 而且文档说, deploy.resources是v2标签(例如mem_limit )的新替代品。

有一天,版本2已弃用。 因此,至少在没有大量资源的情况下,使用最新版本无法进行资源管理吗? 对我来说似乎更糟,不能相信这个...

由于许多Docker Compose用户抱怨 compose v3 vs v2的这种不兼容性,因此团队开发了兼容模式

你可以保持相同的部署结构,您提供的,它不会被忽略,简单地通过增加--compatibility标志泊坞窗,撰写命令(搬运工,撰写--compatibility起来),如解释在这里 我使用3.5版进行了测试,并使用了docker stats进行了验证,可以确认它是否有效。

您可以在单一主机上以集群模式运行docker守护程序。 它将添加额外的不需要的功能,例如etcd服务发现,但这一切都在幕后。

Docker文档在此处对此有一个“注释” https://docs.docker.com/engine/swarm/swarm-tutorial/#three-networked-host-machines

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM