在没有swarm的情况下限制Docker中的可用主机资源

Lio*_*ion 14 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
Run Code Online (Sandbox Code Playgroud)

这给了我警告:

警告:某些服务(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

这适用于单个容器.但是我不能使用它(至少在没有违反清晰的关注点的情况下),因为我需要使用两个不同的容器.

编辑:临时解决方法

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

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

Yon*_*kof 6

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

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


Ber*_*ard -2

您可以在单个主机上以 swarm 模式运行 docker 守护进程。它将添加额外的不需要的功能,例如 etcd 服务发现,但这都是幕后的事情。

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