游览和设置新的容器工具 Linux Containers
容器可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。本文循序渐进地介绍容器工具 Linux? Containers(LXC)。作者在文中演示如何设置和使用它们。
容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(paravirtualization)和系统调用替换中的复杂性。
通过提供一种创建和进入容器的方式,操作系统让应用程序就像在独立的机器上运行一样,但又能共享很多底层的资源。例如,可以有效地共享公共文件(比如 glibc)的页缓存,因为所有容器都使用相同的内核,而且所有容器还常常共享相同的 libc 库(取决于容器配置)。这种共享常常可以扩展到目录中其他不需要写入内容的文件。
容器在提供隔离的同时,还通过共享这些资源节省开销,这意味着容器比真正的虚拟化的开销要小得多。
容器技术早就出现。例如,Solaris Zones 和 BSD jails 就是非 Linux 操作系统上的容器。用于 Linux 的容器技术也有丰富的遗产,例如 Linux-Vserver、OpenVZ 和 FreeVPS。虽然这些技术都已经成熟,但是这些解决方案还没有将它们的容器支持集成到主流 Linux 内核。(要了解更多关于这些技术的信息,请查看 参考资料 小节)。
相比之下,Linux Resource Containers 项目(见 参考资料)则通过为主流 Linux 内核作贡献来实现容器。与此同时,这些贡献可能对成熟的 Linux 容器解决方案有用处 — 为更成熟的容器项目提供公共后端。本文简要介绍如何使用由 LXC 项目创建的工具。
为了充分利用本文,您应该熟悉使用命令行运行程序,例如 make、gcc 和 patch。此外,还应该熟悉 tarball(*.tar.gz 文件)的解压。
获取、构建和安装 LXC
LXC 项目由一个 Linux 内核补丁和一些 userspace 工具组成。这些 userspace 工具使用由补丁增加的内核新特性,提供一套简化的工具来维护容器。
在使用 LXC 之前,首先需要下载 Linux 内核源代码,应用适当的 LXC 补丁,然后构建、安装和启动它。最后再下载、构建和安装 LXC 工具。
我使用一个打了补丁的 Linux 2.6.27 内核(见 参考资料)。虽然 2.6.27 Linux 内核的 lxc 补丁可能不适用于您喜欢的发行版的内核源代码,但是 2.6.27 以后的 Linux 版本可能已经包含该补丁提供的大部分功能。所以,强烈建议使用最新的补丁和主流内核源代码。而且,除了下载内核源代码并添加补丁外,还可以使用 git 获取代码:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/daveh/linux-2.6-lxc.git
在 kernelnewbies.org 可以找到关于如何为内核添加补丁,如何配置、构建安装和启动内核的指导说明(见 参考资料)。
LXC 需要一些特定的内核配置。为 LXC 适当配置内核的最容易的方式是使用 make menuconfig,然后选择 Container support。取决于内核所支持的特性,这样做会进一步选择一组其他配置选项。