LXC 不是一个整体系统。它是内核功能的集合,可用于以各种不同的方式隔离进程,并且是一个用户空间工具,可将所有这些功能一起使用来创建成熟的容器。但各个功能仍然可以单独使用,无需 LXC。此外,LXC 不需要 chroot,即使您给它一个 chroot,您也可以将主机系统中的目录绑定挂载到容器中,从而在主机和容器之间共享这些特定的目录树。
例如,LXC 使用 cgroup 来设置容器的资源限制。但它们可以用来设置进程组的资源限制,而无需使用 LXC 工具。你可以操纵/sys/fd/cgroup/memory
or /sys/fs/cgroup/cpuacct
直接将进程放入 cgroup 中,限制它们可以使用的内存或 CPU 量。或者如果您在使用的系统上systemd
,您可以使用控制一组进程的内存限制MemoryLimit=200M
或类似的.service
给定服务的文件。
如果您想使用 LXC 进行轻量级资源管理,无论有没有 chroot,都可以做到这一点。启动LXC容器时,您可以选择要隔离哪些资源;因此您可以创建一个仅包含虚拟化网络的容器,而无需其他任何东西;或者只有内存限制但与主机共享其他所有内容的容器。唯一要隔离的内容是容器配置文件中指定的内容。例如,lxc
附带几个仅隔离网络的示例容器定义;它们与主机共享根分区和几乎所有其他内容。以下是如何运行与主机系统相同的容器,只是它没有网络接口:
sudo lxc-execute -n foo -f /usr/share/doc/lxc/examples/lxc-no-netns.conf /bin/bash
如果您希望与主机共享某些文件而不是其他文件,您有两种选择:您可以使用共享根目录,并挂载您想要在容器中不同的文件;或者您可以使用 chroot,但挂载您想要在容器中共享的文件。
例如,以下是与主机共享除以下内容之外的所有内容的容器的配置:/home
;它改为绑定安装/home/me/fake-home
over /home
容器内:
lxc.mount.entry = /home/me/fake-home /home none rw,bind 0 0
或者,如果您想拥有完全不同的根目录,但仍共享一些目录,例如/usr
,您可以将几个目录绑定挂载到一个目录中,并将其用作文件系统的根。
因此,您有很多选择,可以根据您的需求选择隔离一个组件、多个组件或 LXC 支持的多个组件。