在 CentOS / RHEL / Ubuntu 上安装和设置 LXC Linux 容器

举报
Tiamo_T 发表于 2022/10/06 08:27:45 2022/10/06
【摘要】 LXC 代表 Linux 容器。 Linux 容器是轻量级的“虚拟化”方法,可在单个 Linux 内核的单个控制主机上同时运行多个虚拟单元。 Linux 内核包含用于资源隔离(CPU、内存、块 I/O、网络等)的 cgroup,不需要启动任何虚拟机。

LXC 代表 Linux 容器。

Linux 容器是轻量级的“虚拟化”方法,可在单个 Linux 内核的单个控制主机上同时运行多个虚拟单元。

Linux 内核包含用于资源隔离(CPU、内存、块 I/O、网络等)的 cgroup,不需要启动任何虚拟机。

Cgroups 还提供命名空间隔离,以完全隔离操作环境的应用程序视图,包括进程树、网络、用户 ID 和挂载的文件系统。

LXC 是开源软件,在 GNU LGPLv2.1+ 许可下获得许可。

容器实际上利用称为命名空间、cgroup 和 chroot 的内核特性来划分一个包含的区域。

因此,LXC 的最终结果看起来很像一个虚拟机,但没有任何管理程序。

1. LXC 安装的先决条件

在安装 LXC 之前,请使用 yum update 确保您的系统是最新的,如下所示。

# yum update

LXC 依赖于两个库;libpcap 和 libcgroup。这也需要busybox 和bridge 实用程序。

为我们的 LXC 安装安装以下必需的软件包。

# yum install libcap-devel libcgroup busybox wget bridge-utils

让我们确保我们获得了从源代码编译和安装任何软件所需的所有编译器和相关开发工具。

# yum groupinstall "Development tools"

有关 yum 组的更多信息,请参阅我们的yum 命令文章。

2. 下载 LXC Linux 容器

从Linux Containers Project下载最新版本的 LXC 。

使用 wget 将 LXC 最新稳定版本的 tar 球下载到您的机器上,如下所示。

# cd /

# wget http://linuxcontainers.org/downloads/lxc-1.1.5.tar.gz

如果您在使用上述 wget 时收到与证书相关的错误消息,请使用 no-check-certificate 选项,如下所示。

# wget --no-check-certificate https://linuxcontainers.org/downloads/lxc-1.1.5.tar.gz

或者,如果您愿意,也可以使用 git clone 下载最新的开发版本或稳定版本,如下所示。

git clone git://github.com/lxc/lxc -b {branch}

在上述命令中,{branch} 可以是当前开发分支的“master”,也可以是 1.0 版本的稳定更新分支的“stable-1.0”。

3.配置桥接适配器

接下来,创建一个桥接适配器并在桥接适配器上配置静态 IP,如以下 ifcfg-eth0 示例所示。确保您的物理适配器指向 ifcfg-eth0 中的此桥接适配器。

# cd /etc/sysconfig/network-scripts	

# vi ifcfg-br0
DEVICE="br0"
BOOTPROTO="static"
IPADDR="xxx.xxx.xxx.xxx"
NETMASK="255.255.255.xxx"
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"

将上述文件中的所有“xxx”替换为与您的 IP 地址和网络掩码匹配的值。例如,将上述文件中的 IPADDR 值更改为您机器的 IP 地址。

4. 安装 LXC Linux 容器

接下来,解压我们之前下载的 LXC tar 包,执行 ./configure,然后执行 make 和 make install,在您的系统上安装 LXC,如下所示。

默认情况下,这会将所有 lxc 二进制文件安装在 /usr/local/bin 目录下。

# cd /

# tar xvfz lxc-1.1.5.tar.gz

# cd lxc-1.1.5/

# ./configure

# make && make install

以下是上述 ./configure 命令输出的最后几行中的几行。

# ./configure
...
...
config.status: creating src/python-lxc/setup.py
config.status: creating src/lua-lxc/Makefile
config.status: executing depfiles commands
config.status: executing default commands
----------------------------
Environment:
 - compiler: gcc
 - distribution: centos
 - init script type(s): sysvinit
 - rpath: no
 - GnuTLS: no
 - Bash integration: yes
Security features:
 - Apparmor: no
 - Linux capabilities: yes
 - seccomp: no
 - SELinux: no
 - cgmanager: no
Bindings:
 - lua: no
 - python3: no
Documentation:
 - examples: yes
 - API documentation: yes
 - user documentation: no
Debugging:
 - tests: no
 - mutex debugging: no
Paths:
 - Logs in configpath: no

以下是上述 make 命令输出的最后几行。

# make
...
Building full member lists recursively...
Adding members to member groups.
...
Generating style sheet...
Generating index page...
Generating page index...
Generating example documentation...
Generating file sources...
Generating code for file /usr/save/lxc-1.1.5/src/lxc/attach_options.h...
Generating code for file /usr/save/lxc-1.1.5/src/lxc/lxccontainer.h...
Generating code for file /usr/save/lxc-1.1.5/src/lxc/lxclock.h...
Generating file documentation...
Generating docs for file /usr/save/lxc-1.1.5/src/lxc/attach_options.h...
...
Generating file member index...
make[2]: Leaving directory `/usr/save/lxc-1.1.5/doc/api'
make[2]: Entering directory `/usr/save/lxc-1.1.5/doc'
...
Making all in hooks
make[1]: Entering directory `/usr/save/lxc-1.1.5/hooks'
make[1]: Nothing to be done for `all'.

以下是上述 make install 命令输出的最后几行。

# make install
...
Making install in hooks
make[1]: Entering directory `/usr/save/lxc-1.1.5/hooks'
 /bin/mkdir -p '/usr/local/share/lxc/hooks'
 /usr/bin/install -c clonehostname mountecryptfsroot ubuntu-cloud-prep squid-deb-proxy-client '/usr/local/share/lxc/hooks'
...
/bin/mkdir -p /usr/local/var/lib/lxc
/bin/mkdir -p /usr/local/var/cache/lxc
 /bin/mkdir -p '/usr/local/lib/pkgconfig'
 /usr/bin/install -c -m 644 lxc.pc '/usr/local/lib/pkgconfig'

5. 为 LXC 共享库创建软链接

执行 lxc-info 验证 LXC 是否安装成功。如果一切都正确安装,我们将看到一条消息,指出给定容器名称(例如,test)不存在。在这个阶段我们还没有创建任何容器。我们只想确保此命令不会引发任何与共享库相关的错误。

# lxc-info --name test
test doesn't exist

根据系统上的配置方式,您可能还会收到以下与 liblxc.so.1 库相关的错误消息。

# lxc-info --name test
lxc-info: error while loading shared libraries: liblxc.so.1: cannot open shared object file: No such file or directory

在这种情况下,要修复它,请创建一个名为 libxc.so.1 的链接,如下所示,它将指向 liblxc.so.xxx 文件的正确版本。

# ln -s /usr/local/lib/liblxc.so.1.1.5 /lib64/liblxc.so.1

# ls -l /lib64/liblxc.so.1
lrwxrwxrwx. 1 root root 30 Jan 20 09:17 /lib64/liblxc.so.1 -> /usr/local/lib/liblxc.so.1.1.5

6. 验证 LXC 设置和配置

接下来,您还可以执行 lxc-checkconfig 以验证您的 lxc 环境是否设置正确。

以下将有四个不同部分的输出:1) 命名空间,2) 控制组 3) 杂项和 4) 检查点/恢复。部分输出如下所示。

# lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-2.6.32-431.el6.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
--- Control groups ---
Cgroup: enabled
Cgroup namespace: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
..
--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
..
--- Checkpoint/Restore ---
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
..
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/local/bin/lxc-checkconfig

如果您的系统上的所有内容都已正确配置,则在上述输出中,上述组中的所有选项都应显示为“启用”。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。