一、什么是LXC?

LXC(Linux Container的缩写)是一个基于Linux内核的容器虚拟化技术,它提供了一种轻量级、快速、简便的方式来创建和管理系统容器。与传统虚拟化技术不同,LXC并不会模拟硬件,而是利用Linux内核的功能来隔离进程和文件系统。这使得LXC可以更加轻量级和高效,启动和运行容器的速度也比虚拟机快得多。

LXC容器可以被用于各种用途,包括开发、测试、部署和运行应用程序。容器可以随时创建、启动、停止和删除,容器的配置也可以根据需要进行调整。

LXC是一个底层的容器技术,它提供了命名空间、cgroups、文件系统隔离等内核级别的隔离特性,而不像Docker那样提供更上层的高级容器管理功能。

LXC的出现比较早,早于Docker,但是初期一直不温不火,直到Docker的出现加速了它的发展。

二、LXC安装和使用

LXC可以独立使用被用来实现容器创建、停止容器等基础功能。基于以下步骤可以简单使用LXC:

2.1、安装LXC

首先,需要在Linux系统上安装LXC软件包。在大多数Linux发行版中,可以使用系统自带的包管理器进行安装,例如,在Debian/Ubuntu上,可以使用以下命令进行安装:

sudo apt-get install lxc

2.2、创建容器

创建一个新的容器可以通过 lxc-create 命令完成,该命令可以创建一个基于模板的容器,例如,以下命令将创建一个基于Ubuntu 20.04模板的新容器:

sudo lxc-create -n mycontainer -t ubuntu -- --release 20.04

其中,-n选项指定容器的名称,-t选项指定使用的模板,--release选项指定模板的版本。执行该命令后,LXC将自动下载并安装Ubuntu 20.04模板,并创建一个名为“mycontainer”的新容器。

2.3、启动容器

创建容器后,可以使用 lxc-start 命令启动它,例如:

sudo lxc-start -n mycontainer

该命令将启动名为“mycontainer”的容器,并在控制台上输出容器的日志信息。如果需要以后台模式启动容器,可以使用-l选项指定日志文件的路径,例如:

sudo lxc-start -n mycontainer -d -l /var/log/lxc/mycontainer.log

2.4、进入容器

启动容器以后可以使用 lxc-attach 命令进入运行中的容器,例如:

sudo lxc-attach -n mycontainer

该命令将在当前终端中打开一个新的shell,允许在容器中运行命令和操作文件系统。当完成操作并退出容器时,只需键入“exit”即可返回主机系统。

2.5、停止容器

要停止运行中的容器,可以使用 lxc-stop 命令,例如:

sudo lxc-stop -n mycontainer

该命令将发送一个SIGPWR信号给容器进程,以请求它优雅地关闭并停止。

这些是LXC的基本使用方法,如果感兴趣可以在LXC文档中找到更多高级功能和配置选项。

三、Docker和LXC的关系

在Docker的早期版本中,它使用LXC作为底层容器引擎来实现容器隔离和虚拟化,Docker确实也让LXC发展得更快。

但是随着时间的推移,Docker逐渐摆脱了对LXC的依赖,并自己实现了一个名为libcontainer的容器引擎,以取代LXC。libcontainer是一个纯Go语言编写的库,它实现了Linux内核的命名空间、cgroups等特性,并提供了更多的容器管理功能。从Docker 1.11版本开始,Docker默认使用libcontainer作为容器引擎,而非LXC。

此外,Docker 提供了更加完整的工具链和生态系统,使得容器的创建、管理和部署变得更加简单和可靠。

因此,Docker 可以看作是 LXC 技术的一种封装和扩展,提供了更多的功能和工具,让容器技术更容易被使用和推广。

目前虽然Docker默认使用了libcontainer,但是仍然可以配置Docker底层使用LXC作为容器引擎。

四、配置Docker使用LXC

Docker默认使用的是自己的容器引擎,即Docker引擎,而不是LXC容器引擎。如果您想在Docker中使用LXC容器引擎,可以按照以下步骤进行配置:

4.1、安装LXC和LXD

首先,需要安装LXC和LXD。LXC是Linux容器的用户空间接口,而LXD是一个容器管理器,提供了更高级别的容器管理功能。您可以使用以下命令在Ubuntu系统上安装它们:

sudo apt-get update
sudo apt-get install lxc lxd

4.2、创建一个LXD容器

在LXD中,可以通过创建一个新的容器来运行应用程序。使用以下命令创建一个新的LXD容器:

sudo lxc launch ubuntu:18.04 mycontainer

这将使用Ubuntu 18.04镜像创建一个名为“mycontainer”的新容器。

4.3、配置Docker使用LXC

在Docker配置文件中增加以下配置,以告诉Docker使用LXD容器来运行应用程序。

{
  "runtimes": {
    "lxd": {
      "path": "/usr/bin/runc"
  "default-runtime": "lxd"
}

默认情况下,Docker配置文件位于 /etc/docker/daemon.json 。请确保在修改配置文件之前备份它。

重启Docker服务以使更改生效。使用以下命令重启Docker服务:

sudo service docker restart

完成后,Docker就能够使用LXD容器引擎来运行应用程序,底层使用LXC。

五、配置Podman使用LXC

Podman是另外一个流行的容器运行时,其底层默认使用的是runC,但是也可以指定使用LXC作为其底层容器引擎来实现容器隔离和虚拟化,需要按照以下步骤进行设置:

5.1、确认系统上已经安装了LXC。

可以使用以下命令安装LXC

$ sudo apt-get update
$ sudo apt-get install lxc



5.2、设置环境变量

可以在终端中使用以下命令设置环境变量“ CONTAINER_RUNTIME ”为“lxc”

$ export CONTAINER_RUNTIME=lxc

或者将其添加到shell配置文件中,如“/.bashrc”或“/.zshrc”中。

5.3 、运行容器。

现在可以使用Podman来运行容器,它将使用LXC作为底层容器引擎来实现容器隔离和虚拟化。

$ podman run -it --rm debian /bin/bash

该命令将启动一个Debian容器,并进入容器的shell中。

需要注意的是,使用LXC作为底层容器引擎可能需要管理员权限(root用户)。因此,建议使用sudo或者root用户运行以上命令。另外,使用LXC作为容器引擎可能需要更高的系统资源,因此建议在使用之前进行测试和评估。