首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker 17.06-ce共享主机资源的默认容器内存限制

Docker 17.06-ce共享主机资源的默认容器内存限制
EN

Stack Overflow用户
提问于 2017-09-25 15:15:23
回答 1查看 6.7K关注 0票数 11

我有一个资源为8核/ 16 GB RAM的主机。我们使用cgroup为自定义应用程序分配CPUmemory。我们试图在自定义应用程序和停靠器之间创建一个静态分区资源。例如,我们正尝试分配以下各项:

代码语言:javascript
复制
4 CPU cores / 8 GB RAM --> docker
3 CPU cores / 6 GB RAM --> custom_app_1

the remaining for OS

我们已经设法为custom_app_1执行隔离。问题是我如何为我们的容器创建一个默认的限制内存和cpu,而不必对单个容器使用标志--memory--cpus。我不需要限制每个容器,但我需要确保在主机中运行的所有容器都不能超过8GB内存和4个CPU核的使用量,否则,它将使用我的custom_app_1来争夺资源。

当我执行docker stats时,每个容器都看到16 GB内存,如何配置使它们只看到8 GB内存和4 CPU核心?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-04 05:01:01

因此,您需要做的是为内存创建一个SystemD切片。

代码语言:javascript
复制
# /etc/systemd/system/limit-docker-memory.slice
[Unit]
Description=Slice with MemoryLimit=8G for docker
Before=slices.target

[Slice]
MemoryAccounting=true
MemoryLimit=8G

然后在/etc/docker/daemon.json中配置该切片

代码语言:javascript
复制
{
    "cgroup-parent": "limit-docker-memory.slice"
}

重新加载系统和重新启动码头

代码语言:javascript
复制
systemctl daemon-reload
systemctl restart docker

请参阅文档中的相关部分

默认CGROUP父级

- cgroup -父选项允许您设置用于容器的默认cgroup父级。如果未设置此选项,则对于fs cgroup驱动程序默认为/docker,对systemd cgroup驱动程序默认为system.slice。 如果cgroup具有前导正斜杠(/),则在根cgroup下创建cgroup,否则在守护进程cgroup下创建cgroup。 假设守护进程在cgroup daemoncgroup中运行,- cgroup -parent=/foobar在/sys/fs/ cgroup /memory/foobar中创建一个cgroup,而使用-cgroup-parent=foobar则在/sys/fs/cgroup/memory/daemoncgroup/foobar中创建cgroup。 systemd cgroup驱动程序对于-cgroup-父程序有不同的规则。Systemd按片表示层次结构,该切片的名称对树中的位置进行编码。所以-cgroup-父组应该是一个片名。名称可以由以破折号分隔的一系列名称组成,这些名称描述了从根片到切片的路径。例如,- cgroup -parent=user-a-b.片意味着容器的内存cgroup是在/sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-.scope.中创建的。 该设置还可以设置为每个容器,使用--cgroup-父选项在docker create和docker运行中,并且优先于守护进程上的--cgroup-父选项。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46408673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档