Linux 容器及OpenVZ 简介
Linux 容器(Linux Container,LXC)是一种轻量级的虚拟运行环境,它与传统的虚拟机方
式不同。传统的虚拟机需要对硬件作出抽象并提供了一个完整的操作系统,而LXC 不同的
地方就是,多个容器都与系统共用一套内核机制,而容器中提供的只是运行环境需要的文件
系统、虚拟网络等。
具体的架构如图所示:
如图中所示,本文要介绍的OpenVZ 是一种容器的实现方式。还有其他的一些容器,如LXC tool (这个工具可以用于创建LXC 运行环境,Docker 可以说就是基于LXC tool的),本博客会在后续相继深入分析。
OpenVZ 对于容器技术实践较早,内核中用于实现LXC 的很多机制也都出自他们之手,目前OpenVZ 的众多特性都基于RHEL6 内核(内核版本为2.6.32)进行修改,而且其中一部分新特性并未加入主流内核,所以建议使用OpenVZ 的内核以达到更好的容器特性,如隔离性、快照等。
OpenVZ 安装
Debian7(wheezy) 版本默认不支持OpenVZ(不知是因为内核版本问题,亦或一些其他问题)
,但是OpenVZ 团队添加了对Debian7 的支持,我们可以通过安装他们提供的Linux 内核镜
像完成安装,参考[1][3]
1. 安装内核镜像
如前面所属,在Debian7 上需要专门安装OpenVZ 提供的内核镜像才可以完整支持OpenVZ,方法如下:
1.1 添加源并更新(下文操作都需要root 权限)
`# cat << EOF > /etc/apt/sources.list.d/openvz.list
deb http://download.openvz.org/debian wheezy main
deb http://download.openvz.org/debian wheezy-test main
EOF
# apt-get update`
1.2 安装内核镜像
`# apt-get install linux-image-openvz-amd64
# apt-get install linux-image-openvz-686 (如果您仍然使用32位系统)`
2. 配置sysctl 以及安装相关工具
OpenVZ 内核镜像安装完毕,在重启之前还需要如下配置
2.1 有一些内核参数需要配置以保证OpenVZ 的正常运行,配置文件为”/etc/sysctl.conf”
# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0
# Enables source route verification
net.ipv4.conf.all.rp_filter = 1
# Enables the magic-sysrq key
kernel.sysrq = 1
# We do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
2.2 需要安装一些用户空间的工具
# apt-get install vzctl vzquota ploop vzstats
3. 重启至OpenVZ 内核
配置以及相关软件安装完毕,需要重启内核至OpenVZ 的内核
简单上手
对于这样一个可以提供完整系统运行环境的Linux 容器,当然得把玩把玩,快快坐好体验一下吧。更多参考[2][4]
1. 下载预先准备的模板(也可以称作镜像)
1.1 从官方网站下载你需要的模板[5][6]
1.2 将下载好的模板移动到需要的路径下
# mv ubuntu-14.04-x86.tar.gz /var/lib/vz/template/cache/
2. 创建以及配置容器信息
# vzctl create CTID --ostemplate osname
# vzctl set CTID --hostname test --save
# vzctl set CTID --ipadd a.b.c.d --save
# vzctl set CTID --nameserver a.b.c.d --save
如:
# vzctl create 111 --ostemplate ubuntu-14.04-x86
# vzctl set 111 --hostname ubuntu --save
# vzctl set 111 --ipadd 192.168.2.233 --save
# vzctl set 111 --nameserver 192.168.2.1 --save
3. 开始运行以及使用
# vzctl start CTID
# vzctl exec CTID ps ax # Now the container is running!
# vzctl enter CTID
entered into container CTID
[container]# ...
[container]# exit
exited from container VEID
# vzctl stop CTID
# vzctl destroy CTID
如:
# vzctl start 111
# vzctl enter 111
[container]# do something (default is root)
[container]# exit
# vzctl stop 111