共计 2415 个字符,预计需要花费 7 分钟才能阅读完成。
一、LXC 简介
LXC 是 Linux 容器(Linux Containers)的缩写,是一种轻量级的虚拟化技术,允许在同一主机上运行多个相互隔离的 Linux 容器,每个容器都有自己的完整的文件系统、网络、进程和资源隔离环境。LXC 使用 Linux 内核提供的 cgroups 和命名空间(Namespaces)功能来实现容器隔离。
与传统的虚拟机技术不同,LXC 不需要运行完整的操作系统镜像,而是在主机操作系统上运行多个独立的用户空间,这使得 LXC 容器更加轻量级和高效。LXC 容器可以快速启动,占用更少的资源,并且可以实现更高的密度。
LXC 提供了一组工具,包括 lxc-start、lxc-stop、lxc-info、lxc-console 等,可以用来管理和操作容器。LXC 还支持多种文件系统,包括 Btrfs、ZFS、EXT4 等,可以根据需要选择不同的文件系统类型。
LXC 被广泛应用于云计算、容器化、持续集成和测试等领域,例如 Docker 就是基于 LXC 的容器技术。LXC 还被用于开发和测试环境中,可以为开发人员提供一个相对独立的开发环境,从而避免应用之间的冲突。
二、Docker VS LXC
Docker 和 LXC 都是 Linux 下的容器技术,但它们有一些区别和联系。
- 架构不同
Docker 在初期使用了 LXC 来实现容器化,但是自从 Docker 0.9 版本开始,它采用了自己的容器技术,称为 libcontainer(后来更名为 runC)。libcontainer 是一个基于进程的容器运行时,用于创建和管理容器。
runC 直接利用了 Linux 内核的命名空间、cgroups、文件系统挂载等特性,来实现容器的隔离和管理。它作为 Docker 的默认容器运行时,提供了更轻量级、更高性能的容器方案。
- 镜像构建方式不同
Docker 使用 Dockerfile 来构建镜像,Dockerfile 是一种文本文件,用来描述镜像的构建过程和依赖关系。LXC 没有类似 Dockerfile 的镜像构建方式,它使用基于文件系统的容器模板来创建容器。
- 应用场景不同
Docker 主要用于应用部署,它提供了一种轻量级、可移植、可扩展的应用部署解决方案,可以快速部署、运行和管理应用。LXC 主要用于系统虚拟化和资源隔离,它可以为每个容器提供独立的文件系统、网络、进程和资源隔离环境,可以为多个应用提供一个相对独立的开发和测试环境。
Docker 更适合构建好以后,除了数据目录,其他的不会有太多操作的情况,否则迁移的时候,如果使用 commit 的方式镜像会非常大。但是对于 lxc 容器来说,直接使用宿主机的一个文件夹或设备,维护与迁移都非常方便。比如运行 nginx,那么推荐的方式还是使用 docker,比较简单;但如果需求是在容器里面进行开发,还需要安装一大堆软件,比如 lnmp,这种情况还是推荐 lxc。
- 占用资源不同
相对于 LXC,Docker 的容器启动速度更快,占用资源更少。这是因为 Docker 容器使用了更多的技术手段来优化容器启动和运行的效率,例如使用联合文件系统(UnionFS)来共享文件系统,使用镜像层缓存来加速镜像构建,使用 Docker 镜像仓库等。
三、安装
使用下面的命令安装 LXC 在用户态的工具:
sudo apt-get install lxc
然后检查当前内核是否支持 LXC。如果所有结果都是“enable”,说明内核支持:
lxc-checkconfig
安装完 LXC 工具后,就能看到 LXC 自动创建了一块桥接网卡 lxcbr0,可以在 /etc/lxc/default.conf 中设置。当创建了 LXC 容器后,它的网口会自动链接到这个桥接网卡上,然后这个容器就能和外部通信了。
四、基本使用
1. 创建容器
下面这条命令,将使用在线的模板进行创建一个名为 my-container 的容器。创建的容器可以在 /var/lib/lxc
文件夹下找到。进入该文件夹下的容器名称文件夹,可以看见 rootfs 文件夹和 config 文件。
- config 文件是容器的一些配置信息,这里指定了根文件系统,即 rootfs 文件夹。此外,还包含了 lxc 的公共配置文件,指定了容器
sudo lxc-create -t download -n my-container -- -d ubuntu -r focal -a amd64
sudo lxc-create
: 表示以 root 权限创建容器。
-t download
: 这个参数指定使用下载模板来创建容器。下载模板允许从预定义的模板镜像下载容器文件系统,以便创建新的容器。 如果提示找不到 download 模板,那么就是 lxc 版本太低了,建议 2.0 以上
-n my-container
: 这个参数指定了容器的名称。在这个命令中,容器的名称是“my-container”,你可以根据自己的需求自定义容器名称。
--
: 这个横杠表示后续的参数将传递给下载模板脚本。
-d ubuntu
: 这个参数指定使用的模板镜像的发行版。在这个命令中,使用的是Ubuntu发行版。
-r focal
: 这个参数指定了模板镜像的版本。在这个命令中,使用的是Ubuntu的focal版本,也就是Ubuntu 20.04 LTS。
-a amd64
: 这个参数指定了模板镜像的架构。在这个命令中,使用的是amd64架构,也就是64位架构。
2. 查看容器
列出所有容器
sudo lxc-ls --fancy
查看具体容器
sudo lxc-info -n my-container
3. 启动容器
如果创建容器时,没有指定 -d
参数,则容器状态为暂停状态,需要进行启动。
sudo lxc-start -n my-container
4. 进入和退出容器
sudo lxc-attach -n my-container
进入容器后,就像进了一台新的机器一样,在这里可以干所有能在宿主机干的事情。
使用 exit
命令退出容器:
exit
5. 停止容器
sudo lxc-stop -n my-container
6. 销毁容器
sudo lxc-destroy -n my-container
提醒:本文发布于415天前,文中所关联的信息可能已发生改变,请知悉!