1.1 LXC是什么?
1.1.1 关于LXC
LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。
图 - lxc官方logo
在Linux内核中,提供了cgroups功能,来达成资源的区隔化。它同时也提供了名称空间区隔化的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。但是cgroups并不一定需要引导任何虚拟机。
LXC利用cgroups与名称空间的功能,提供应用软件一个独立的操作系统环境。LXC不需要Hypervisor这个软件层,软件容器(Container)本身极为轻量化,提升了创建虚拟机的速度。软件Docker被用来管理LXC的环境。
1.1.2 关于操作系统层虚拟化
操作系统层虚拟化(英语:Operating system–level virtualization),一种虚拟化技术,这种技术将操作系统内核虚拟化,可以允许使用者空间软件物件(instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一物件运行。这个软件物件,也被称为是一个容器(containers),虚拟引擎(Virtualization engine),虚拟专用服务器(virtual private servers)或是 jails。对每个行程的拥有者与使用者来说,他们使用的服务器程式,看起来就像是自己专用的。
操作系统层虚拟化之后,可以实现软件的即时迁移(Live migration),使一个软件容器中的物件,即时移动到另一个操作系统下,再重新执行起来。但是在这种技术下,软件即时迁移,只能在同样的操作系统下进行。
在类Unix操作系统中,这个技术最早起源于标准的chroot机制,再进一步演化而成。除了将软件独立化的机制之外,内核通常也提供资源管理功能,使得单一软件容器在运作时,对于其他软件容器的造成的交互影响最小化。
1.1.3 LXC的特点
目前的LXC使用下列内核功能来控制进程:
?♂️ 内核命名空间(进程间通信、uts、mount、pid、network和user)
?♂️ AppArmor和SELinux配置
?♂️ Seccomp策略
?♂️ chroot(使用pivot_root)
?♂️ Kernel Capibilities
?♂️ 控制组(cgroups)
因此,LXC通常被认为介于“加强版”的chroot和完全成熟的虚拟机之间的技术。LXC的目标是创建一个尽可能与标准安装的Linux相同但又不需要分离内核的环境。
关于chroot可以参考:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
1.1.4 LXC的应用
Docker:
它在0.9版之前都是使用LXC技术,但在0.9版之后,已不再是唯一且默认的运行环境。
Proxmox VE:
Proxmox VE是一个开源的服务器虚拟化环境Linux发行版。基于Debian,使用基于Ubuntu的定制内核。
它直到4.0版才使用LXC技术,在此之前的版本都是使用OpenVZ技术。
1.2 安装LXC
1.2.1 环境说明
官方文档:https://linuxcontainers.org/lxc/getting-started/
安装LXC内核版本不能低于2.6.32,对lxc至此最佳的为Ubuntu