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

时间:2017-09-25 15:15:24

标签: docker

我的主机资源为8核/ 16 GB RAM。我们使用cgroup为我们的自定义应用分配CPUmemory。我们尝试在自定义应用程序和docker之间创建静态分区资源。例如,我们正在尝试分配以下内容: -

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 RAM和4个CPU内核的使用量,否则,它将与我的custom_app_1对抗资源

当我执行docker stats时,每个容器都看到16 GB RAM,我该如何配置,以便它们只能看到8 GB RAM和4个CPU内核

1 个答案:

答案 0 :(得分:8)

所以你需要做的就是为内存创建一个SystemD切片。

str1 <- "1234cAc5678cAc90123"

然后在# /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

重新载入systemctl并重启docker

{
    "cgroup-parent": "limit-docker-memory.slice"
}

请参阅documentation

中的相关部分

DEFAULT CGROUP PARENT

  

--cgroup-parent选项允许您设置用于容器的默认cgroup父级。如果未设置此选项,则默认为/ docker for fs cgroup driver和system.slice for systemd cgroup driver。

     

如果cgroup有前导斜杠(/),则在根cgroup下创建cgroup,否则在守护进程cgroup下创建cgroup。

     

假设守护进程在cgroup daemoncgroup中运行, - cgroup-parent = / foobar在/ sys / fs / cgroup / memory / foobar中创建一个cgroup,而使用--cgroup-parent = foobar在/ sys中创建一个cgroup / FS / cgroup中/存储器/ daemoncgroup / foobar的

     

systemd cgroup驱动程序对--cgroup-parent具有不同的规则。 Systemd按片表示层次结构,并且片的名称对树中的位置进行编码。因此,systemd cgroups的--cgroup-parent应该是切片名称。名称可以由以字符串分隔的一系列名称组成,这些名称描述了从根切片到切片的路径。例如, - cgroup-parent = user-ab.slice表示在/sys/fs/cgroup/memory/user.slice/user-a.slice/user-ab.slice/docker中创建容器的内存cgroup。 -.scope。

     

也可以使用docker create和docker run上的--cgroup-parent选项为每个容器设置此设置,并且该设置优先于守护程序上的--cgroup-parent选项。