LXC是Linux containers的简称,操做系统级别的虚拟化技术。它能够在操做系统层次上为进程提供的虚拟的执行环境。一个虚拟的执行环境被称为一个容器(container)。能够为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。linux
Debian/Ubuntu系统下,使用apt安装:shell
sudo apt-get install lxc bridge-utils libvirt-bin debootstrap
注意修改/bin/sh,连接到/bin/bash。lxc在某些版本上有一个bug,声明为/bin/sh却使用bash语法,致使不如此连接会出现错误。bootstrap
使用lxc-create -n name -t template
生成镜像。ubuntu
在/usr/share/lxc/templates能够看到可用的模板。segmentfault
在/var/cache/lxc/debian会缓存生成过程的临时文件。缓存
生成的镜像须要在镜像内安装lxc,不然没法使用lxc-execute。bash
在config文件内,写入cgroup限定规则。注意,使用内存限定的话,须要在内核参数中加入cgroup_enable=memory
。网络
在debian/ubuntu下,能够修改/etc/default/grub文件,使用update-grub从新生成规则。网站
GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory quiet"
在config文件中能够以下限定:ui
lxc.cgroup.memory.limit_in_bytes = 512M # 限定内存 lxc.cgroup.cpuset.cpus = 0 # 限定可使用的核 lxc.cgroup.blkio.throttle.read_bps_device = 8:0 100 # 读取速率限定 lxc.cgroup.blkio.throttle.write_bps_device = 8:0 100 # 写入速率限定 lxc.cgroup.blkio.throttle.read_iops_device = 8:0 100 # 读取频率限定 lxc.cgroup.blkio.throttle.write_iops_device = 8:0 100 # 写入频率限定
lxc-start -n name /bin/echo hello
还能够用如下指令,在已经启动的container里执行进程。
lxc-attach -n name /bin/echo hello
如下指令是用来在未启动的container里执行进程的。
lxc-execute -n name /bin/echo hello
** 注意,虽然系统初始化了全部资源,可是因为sysv-init没有执行,所以系统内初始化并没完成。这致使系统不完整,例如网络部分不可用。 **
lxc采用veth技术,每次虚拟机创建时,都会产生一对veth。虚拟机内的通常叫作eth0,虚拟机外的叫作vethXXX。这张网卡能够以任何linux许可的方式进行配置。
dnsmasq所产生的dhcp封包没法被debian guest的dhcp client认可,所以没法使用dnsmasq自动部署网络。
在开启br-nf后,全部bridge的包都会通过iptables的过滤。于是能够用iptables的FORWARD规则限制guest堆外网的访问。详细配置请参考此处。
做者 shell909090
编辑 SegmentFault 许可 CC-BY-SA 3.0