在没有swarm

时间:2017-02-25 15:26:38

标签: linux docker docker-compose

我只想限制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部署到swarm时生效,并且被docker-compose up和docker-compose run忽略。

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

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

这适用于单个容器。但是我无法使用它(至少不会违反关注点的清晰分离),因为我需要使用两个不同的容器。

编辑:临时解决方法

我发现,在从版本3降级到版本2(将mem_limit置于顶部)后,我可以直接使用version: '2'。但我们目前的版本是3.1,所以这不是一个长期的解决方案。文档说,deploy.resourcesmem_limit等v2标签的新替代品。

有一天,版本2已被弃用。因此,对于最新版本的资源管理是不可能的,至少没有一个群体?对我来说似乎有所恶化,不能相信这个......

2 个答案:

答案 0 :(得分:3)

由于许多Docker Compose用户已经complained得知compose v3 vs v2的这种不兼容性,因此团队开发了compatibility mode

您可以保留您提供的相同部署结构,只需将--compatibility标志添加到docker-compose命令(docker-compose --compatibility up),就可以将其忽略,如{{3} }。我使用3.5版进行了测试,并使用了docker stats进行了验证,可以确认它是否有效。

答案 1 :(得分:0)

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

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