gpt4 book ai didi

docker - 在现有 cgroup 中启动容器

转载 作者:行者123 更新时间:2023-12-02 18:17:21 25 4
gpt4 key购买 nike

我正在寻找编写一个自定义的 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 文档,我找不到任何明显的东西可以传递给 docker 的 -lxc-conf=[] 选项,这可以让我告诉 nginx,因为它开始在为先前启动的预先存在的 cgroup 下启动轨道容器。

我需要考虑的另一件事是,虽然我希望 rails 和 nginx 共享 1024 个 cpu 份额,但我不想知道对方或访问彼此的数据,除非我故意从 rails 共享/public 卷或者其他的东西。

这里的任何建议将不胜感激!

最佳答案

Docker 不支持这个(还)。

这是一个可能的解决方法。 警告:这是一个非常hackish。我真的不建议在生产中使用它,但它可以让您了解所涉及的内容。

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

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

当该工具检测到两个容器之一刚刚启动时,它会将其所有进程移动到这个特殊的 cgroup。由于所有子进程都是在其父进程的控制组中创建的,因此所有 future 的进程也将在该 cgroup 中。

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

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

关于docker - 在现有 cgroup 中启动容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22291104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com