gpt4 book ai didi

linux - 没有 chroot 的 LXC

转载 作者:IT王子 更新时间:2023-10-29 00:09:50 25 4
gpt4 key购买 nike

有什么方法可以在不创建容器的情况下使用进程组使用 LXC 进行资源管理?我正在开发一项在沙箱内运行任意代码的服务,对此我只对硬件资源管理感兴趣。我不想要任何 chrooting;我只希望这些进程组能够访问主文件系统。

有人告诉我 lxc 是轻量级的,但我看到的所有示例都会为每个 lxc 进程创建一个新容器(即具有完整操作系统的目录)。我真的看不出这比任何其他 VM 解决方案轻得多。

那么有什么方法可以让 LXC 用于控制和管理多个进程组,而无需为每个进程组创建单独的容器?

最佳答案

LXC 不是一个单一的系统。它是一个内核功能的集合,可用于以各种不同的方式隔离进程,以及一个用户空间工具,可将所有这些功能结合使用以创建成熟的容器。但是在没有 LXC 的情况下,个别功能仍然可以单独使用。此外,LXC 不需要 chroot,即使您给它一个 chroot,您也可以将主机系统中的目录绑定(bind)挂载到容器中,从而在主机和容器之间共享那些特定的目录树。

例如,LXC 使用 cgroups 来设置容器的资源限制。但它们可用于设置进程组的资源限制,而无需使用 LXC 工具。您可以直接操作 /sys/fd/cgroup/memory/sys/fs/cgroup/cpuacct,将进程放入限制内存或 CPU 数量的 cgroups被允许使用。或者,如果您在使用 systemd 的系统上,您可以使用 MemoryLimit=200M.service 中的类似内容来控制一组进程的内存限制 给定服务的文件。

如果您想使用 LXC 进行轻量级资源管理,您可以使用或不使用 chroot。在启动 LXC 容器时,您可以选择要隔离哪些资源;所以你可以创建一个只有虚拟化网络的容器,没有别的;或者只有内存限制的容器,但与主机共享其他所有内容。唯一要隔离的是容器配置文件中指定的那些。例如,lxc 附带了几个仅隔离网络的示例容器定义;他们与主机共享一个根分区和几乎所有其他东西。以下是如何运行与主机系统相同的容器,但它没有网络接口(interface):

 sudo lxc-execute -n foo -f /usr/share/doc/lxc/examples/lxc-no-netns.conf /bin/bash

如果您希望某些文件与主机共享,而不是其他文件,您有两种选择;你可以使用一个共享的根目录,并挂载你想要在容器中不同的文件;或者您可以使用 chroot,但将您确实想要共享的文件挂载到容器中。

例如,这里是一个容器的配置,它与主机共享除了/home之外的所有内容;它而是将 /home/me/fake-home 绑定(bind)安装在容器内的 /home 上:

lxc.mount.entry = /home/me/fake-home /home none rw,bind 0 0

或者如果你想拥有一个完全不同的根目录,但仍然共享一些目录,如 /usr,你可以将几个目录绑定(bind)到一个目录中,并将其用作文件系统的根目录.

因此您有很多选择,并且可以根据您的需要选择仅隔离一个组件、多个组件或 LXC 支持的尽可能多的组件。

关于linux - 没有 chroot 的 LXC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484937/

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