![Linux 容器到底是什么?](https://linux22.com/image/637735/Linux%20%E5%AE%B9%E5%99%A8%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我已经阅读了很多关于 Linux 容器的文档。我也尝试了CentOS 方式和Ubuntu 方式。
维基百科说
它是一个操作系统级别的虚拟化。
Linuxcontainers.org 说
LXC 是 Linux 内核包含功能的用户空间接口。
我没法弄清楚。
- LXC 只是一个用户界面,还有一些其他内核模块提供容器功能。
- 或者 LXC 是在软件包安装时修补到内核的东西,它还提供用户空间实用程序。
- 在 CentOS 上尝试时,
lxc
虽然安装包在存储库中可用,但不需要它。 - 在 CentOS 上,无需安装
lxc
libvirt 守护进程,即可lxc:///
使用 libvirt 命令实用程序进行连接。那么内核中是否已经有 lxc 模块?但我没有找到任何模块lsmod
。 - 但是,内核中哪个模块提供容器化?
答案1
这是一个令人困惑的话题,因为不是“提供容器化”。容器是一个通用概念实施的在 Linux 内核中使用命名空间进行进程隔离、使用 cgroup 进行资源管理,以及可能更多(如使用 SELinux 进行安全保护)来实现。
这lxc
工具是实现这一点的一个可能的界面 —— 您可以将其视为前端,尽管将其视为“前端加胶水”可能更好。libvirt-lxc
是一个名称相似但完全不同的工具,并且systemd-nspawn
完后还有。
Linux 容器热门话题 Docker 是还一层用户界面和粘合剂,但它实际上可以位于其他几个后端之上,包括上述任何一个——参见这篇关于 Docker 0.9 的博客文章稍旧,特别是图表解释库容器。
Dan Walsh 在 Usenix '13 上就此发表了演讲,可能会有所帮助:https://www.usenix.org/conference/lisa13/secure-linux-containers(免责声明:Dan 是我在 Red Hat 的同事。)
答案2
是也不是。LXC 只是一个用户界面,但不是针对模块,而是针对一些内核功能。主要是进程、用户、网络、挂载、uts 和 ipcs 命名空间,以及 cgroup 和其他内容。
不。
正确,您可以使用其他管理工具使用相同的内核功能或原理。
正如我在第一条消息中所说,它使用 Linux 内核内置的特定功能,不需要任何模块。
无。好吧,在构建内核时需要启用某些功能,但它们并非真正的模块。CentOS(基于 RHEL 构建)在其内核配置中拥有这些功能。