在现有的cgroup中启动容器

我正在寻找一个自定义的Mesos执行程序,允许为我的Rails应用程序请求1CPU(1024个共享),然后“插入”前面的nginx。 在这个过程中,我实际上想使用相同的共享1024 cpu共享启动我的rails和nginx容器。

我知道cgroups是分层的,我应该可以做类似的事情

Base(1024 shares) / \ nginx(no limit) rails(no limit) 

要么

  rails(1024 shares) | nginx(no limit) 

所以我仍然只用了1个CPU,但我的容器将共享资源并被链接。 通过cgroups和lxc docs,我找不到任何明显的东西传递给docker的-lxc-conf = []选项,它允许我告诉nginx,因为它开始在为之前启动而创build的预先存在的cgroup下启动导轨容器。

我需要考虑的另一件事是,虽然我想要rails和nginx共享1024个cpu共享,但是我不想知道其他的或者可以访问彼此的数据,除非我有意地从rails中共享一个/ public卷或者其他的东西。

任何意见在这里将不胜感激!

Docker不支持这个(还)。

这是一个可能的解决方法。 警告:这是一个非常黑客。 我不推荐在生产中使用它,但是它会让你了解涉及的内容。

我们将使用Mesos钩子(或像Docker Spotter这样的工具)在容器启动时触发自动操作。

我们还将使用一个单独的,手动创build的具有适当的CPU份额分配的cgroup。

当工具检测到两个容器中的一个刚启动时,它将其所有进程移动到这个特殊的cgroup。 由于所有的subprocess都是在其父进程的控制组中创build的,所有未来的进程也将在该cgroup中。

但是请注意,存在潜在的竞争条件:如果在将现有进程从原始cgroup移动到“静态”进程时在这些容器中创build新进程,则新进程可能不会自动移动。 您可能必须多次重新扫描tasks文件,以确保您移动了所有内容。

Docker本身会有更好的实现; 也许可以通过创build“容器容器”(容器不运行进程,但只是将其他容器组合在一起),然后将容器放在另一个容器的下面。 或者,也可以使用类似于--volumes-from的语法,但是对于资源。 这将允许启动一个容器,但指示Docker在现有容器下创buildcgroup。