如何使用 Linux 容器多重引导发行版

Linux Containers (LXC) 是一种轻量级的虚拟化技术,它们有多种用途。 它是 Linux 内核的一部分,可以让您在单个 Linux 主机上模拟一个或多个 Linux 发行版。 将其视为 chroot 和完整虚拟化技术(如 VirtualBox、KVM 或 Xen)之间的中间地带。 BSD 世界中存在的类似技术是 FreeBSD Jails。

例如,我正在编写的机器是一台运行 Linux Mint 18 的笔记本电脑,由 Intel Atom 处理器驱动,只有 2 GB 的 RAM。 然而,我正在运行三个 Linux 容器,每个容器都运行着一个 Apache Web 服务器实例,而没有对性能造成很大影响。 这对于像 VirtualBox 这样的传统虚拟机来说是不可想象的。 所以,如果你一直想在你的 Linux 系统上运行多个发行版,Linux Containers 应该可以很好地完成这项工作。

安装和配置 Linux 容器

我们正在 Linux Mint 18 64 位上设置 LXC。 此处提供的安装说明在 Ubuntu 16.04 及更高版本上也可以不加修改地工作。 如果您使用的是其他发行版,请参阅发行版的官方文档,如果某些内容无法按预期工作。 还假定熟悉命令行和一般故障排除。

先决条件

以下是开始使用多个发行版时应设置的一些事项:

1. 安装 LXC 和其他必备软件使用:

[sourcecode]sudo apt install lxc lxc-templates uidmap[/sourcecode]

2. 现在你需要 配置您的个人资料. 输入以下命令进行设置:

[sourcecode]mkdir -p ~/.config/lxc
回声“lxc.id_map = u 0 100000 65536”> ~/.config/lxc/default.conf
echo “lxc.id_map = g 0 100000 65536” >> ~/.config/lxc/default.conf
echo “lxc.network.type = veth” >> ~/.config/lxc/default.conf
echo “lxc.network.link = lxcbr0” >> ~/.config/lxc/default.conf
echo “$USER veth lxcbr0 2” | sudo tee -a /etc/lxc/lxc-usernet[/sourcecode]

3. 然后,你需要 设置用户权限 如下:

[sourcecode]sudo usermod –add-subuids 100000-165536 $USER
sudo usermod –add-subgids 100000-165536 $USER

sudo cgm 创建所有用户
sudo cgm chown 所有用户 $(id -u) $(id -g)
cgm movepid 所有用户 $$[/sourcecode]

设置你的容器

现在您已经安装了 LXC Container 以及其他必备软件,以下是设置 Container 的步骤:

1. 在这个例子中, 我们将设置一个 Ubuntu 容器,命名为 ubu1。 为此,请执行以下命令:

[sourcecode]lxc-create –模板下载 –name ubu1[/sourcecode]

2.这里,--template参数告诉lxc 下载 来自互联网的预配置图像,而 –name 参数指定容器的名称——在本例中为 ubu1。 你可以使用任何你喜欢的名字。

3. 您现在将看到一个列表 支持的发行版图像

发行选择

4. 输入分配的细节 你想安装的。 我将在这里安装 64 位版本的 Ubuntu 16.04(代号 xenial):

安装-ubuntu

5. 如果你愿意 以非交互方式安装映像,下面的命令实现与上面相同的结果:

[sourcecode]lxc-create -t​​ 下载 -n ubu1 — –dist ubuntu –release xenial –arch amd64[/sourcecode]

6. LXC 现在将在您的主机系统上下载并安装一个最小的 Ubuntu xenial 映像。 下载和安装可能需要一些时间,具体取决于您的 Internet 连接和 PC 的速度。 安装后,你会看到这样的画面:

ubuntu_installed

您现在可以使用新设置的 Ubuntu 容器了。

在 Linux 容器中使用多个发行版

启动容器

使用 lxc-start 命令启动你的容器:

[sourcecode]lxc-start -n ubu1 -d[/sourcecode]

这里,-n 参数 指定容器的名称 您希望开始的(在这种情况下为 ubu1),以及 -d 参数 让它在后台运行.

您可以使用 lxc-ls 命令验证容器是否已启动:

[sourcecode]lxc-ls -f[/sourcecode]

运行容器

-f 参数启用 想要 报告。 在这里,你可以看到我有 两个容器 – 一个 Debian(已停止)和一个 Ubuntu(正在运行)。

访问和使用您的容器

你可以 访问容器的控制台 使用 lxc-attach 命令:

[sourcecode]lxc-attach -n ubu1[/sourcecode]

您现在将拥有一个 根壳 在你的容器上。 建议您为 root 用户设置密码,并且 创建一个普通用户帐户

[sourcecode]密码
添加用户beebom[/sourcecode]

当然,换 蜂巢 使用您想要的用户名。 然后,您可以像在常规系统上一样安装软件并配置容器。 例如,在 Debian 或 Ubuntu 容器中:

[sourcecode]apt install wget openssh-server htop tmux nano iptables[/sourcecode]

停止你的容器

玩完容器后,使用 exit 命令 返回主机系统. 现在使用 lxc-stop 命令 停止你的容器

[sourcecode]lxc-停止-n ubu1[/sourcecode]

这将使容器干净地关闭,并且不会消耗系统上的任何资源,除了磁盘空间。

克隆和快照

克隆

在容器中安装程序并根据自己的喜好对其进行配置后,您可能希望 创建一个或多个副本 便于配置。 您可以通过创建一个 克隆,它是容器的精确复制品。

例如,要创建 ubu1 容器的克隆(我们称之为 ubu2), 首先停止容器 使用 lxc-stop,然后使用 lxc-copy 命令:

[sourcecode]lxc-停止-n ubu1

lxc-copy -n ubu1 -N ubu2[/sourcecode]

在这里, -n 选项指定源容器-N 选项指定克隆的名称. 至 核实 如果容器被克隆,请使用 lxc-ls 命令:

克隆

快照

假设您要对容器进行一些潜在的危险或难以从更改中恢复,例如重新配置 Web 服务器。 为了最大限度地减少损坏,您可以在进行此类更改之前创建容器的快照。 如果在配置过程中出现问题,您可以简单地停止容器并通过恢复快照将其恢复到之前的工作状态。

要创建快照,首先 停止容器

[sourcecode]lxc-停止-n ubu1[/sourcecode]

然后, 创建快照 使用 lxc-snapshot 命令:

[sourcecode]lxc-快照-n ubu1[/sourcecode]

这将创建一个名为 snap0 的快照。 您使用此命令创建的任何后续快照都将被调用 快照1, 快照2, ETC。

在此之后,您可以 开始 容器,然后进行所需的更改。 如果您想随时返回到您创建的快照, 停止 容器,并使用带有 -r 参数的 lxc-snapshot 命令 恢复快照

[sourcecode]lxc-snapshot -r snap0 -n ubu1[/sourcecode]

这会将快照 snap0 恢复到 ubu1 容器。

启动时自动启动容器

您可以使容器(例如 Web 服务器容器)在您启动系统时自动启动。 为此,请转到 容器的配置文件,位于 $HOME/.local/share/lxc//config,以及 添加以下行

[sourcecode]lxc.start.auto = 1
lxc.start.delay = 5[/sourcecode]

第一行指定容器应该在引导时启动。 第二个告诉系统 等待 5 秒 在启动下一个容器之前,如果有的话。

故障排除

如果您在启动容器时遇到问题,首先要尝试运行 lxc-start 命令 前景 模式。 例如:

[sourcecode]lxc-start -n ubu1 -F[/sourcecode]

这将 显示当前控制台上的错误e,这对于确定问题的性质非常有用。

同时运行多个容器的问题

如果您尝试一次运行多个容器, 您可能会看到错误 例如“配额已达到”或“未能创建配置的网络”。 这是因为您运行的网络接口多于分配给您的网络接口。 你可以 增加用户可以运行的网桥数量 通过将 /etc/lxc/lxc-usernet 文件修改为 . 它可能看起来像这样:

[sourcecode]# 用户名类型网桥计数
beebom veth lxcbr0 5[/sourcecode]

你可以 改变最后的数字 (在本例中为 5)到更大的数字,例如 10。这将允许您一次运行多达 10 个容器。

Linux 容器的其他用途

Linux 容器有多种用途。 您可以将它们用作轻量级测试框,例如,在将它们提交到生产服务器之前测试 Web 或数据库服务器的各种配置。 另一个用例是测试应用程序如何在各种发行版的不同版本上运行。

您还可以使用它们来隔离您不信任的应用程序 – 此类应用程序所做的任何损害都将仅限于其自己的容器,并且不会影响主机系统。 请注意,虽然可以在容器中运行 GUI 应用程序,但这需要大量时间和精力,因此不推荐使用。 如果您希望在沙盒中运行 GUI 应用程序,请参阅我们关于如何在 Linux 中沙盒应用程序的文章。

还请参见:您可以使用的 7 个最佳 VirtualBox 替代品

使用 Linux 容器同时运行多个发行版

这样就结束了我们在单台计算机上运行多个 Linux 发行版的方法,而没有全尺寸虚拟机的开销。 这项技术的实用性仅受您的创造力的限制,因此请随意尝试并找出新颖的用例。 如果您在设置容器时遇到问题,请随时在评论部分向我们提问。

Leave a Comment

Your email address will not be published.