使用非共享内存和不可共享的cpus创buildDocker容器

我正在使用Docker 17.03 -ee版本

我必须创build一个可变数量的内存和可变数量的cpu的docker容器,这个硬件不应该在容器之间共享。

作为一个例子,让我们考虑我有

主机有8GB内存和4个内核。
创build一个具有3GB内存和1个cpu的Docker容器(d1)
创build一个5GB内存和3个cpu的docker集装箱(d2)
创build一个具有2GB内存和2个cpu的docker contianer(d3)
我已经注意到docker运行采用-m标志使用我可以设置内存限制,它也有–cpuset-cpus使用我可以分配特定的cpu核心到我的容器。

我能够通过使用上面的标志创buildd1和d2。 在创build时,我观察到我必须采取核心pipe理的核心,即我必须保持与容器核心的分配。

我可以给核心数量和核心分配自动照顾?

在创buildd1和d2之后,我已经用完了所有可用的内存和cpuset,我不应该被允许创build更多的容器。

但是,如果我尝试创build一个与内存3GB容器d4我能够成功地创build它。

我如何分配内存到特定容器而不与其他容器共享内存?

是否有任何已经build立的解决scheme,负责pipe理分配给一个容器和cpu-cores分配一个容器的内存? 或者我是否必须自己维护这些信息,并确保在所有内存或内核用完时不应创build新的容器?

由于docker1.13你可以使用--cpus这可能是你在找什么。 在1.13之前,你必须使用--cpu-period--cpu-quota ,其中--cpus实际上是一个帮助器。

限制容器只能使用1个内核:– --cpus=1.0 --cpus=2.0个内核--cpus=2.0等。分数也是允许的。 但是请注意, --cpuset-cpus--cpuset-cpus都不保留这些cpus。 它只是限制可以使用多lessCPU(或哪些核心),但不能禁止任何其他容器/进程使用相同的资源。

情况与内存( --memory )类似。 您可以声明最大限制,容器不能分配比限制更多的资源。 但它不会以任何方式保留或“预先分配”内存。

如果您正在寻找一种强制这种行为的方式,您应该查看容器编排解决scheme,如kubernetes,openshift,docker swarm等。 这些解决scheme专门用于在尊重集群资源总量的情况下轻松分发容器的方法。 那么你可以简单地指定,例如:容器X应该使用最大2个内核,最大500MB内存和2个副本。 而如果你的集群没有足够的资源,容器将被简单地留下来。