在 CentOS / RHEL / Ubuntu 上安装和设置 LXC Linux 容器
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
如果您的系统上的所有内容都已正确配置,则在上述输出中,上述组中的所有选项都应显示为“启用”。
- 点赞
- 收藏
- 关注作者
评论(0)