VMware
Xen
Hyper-V
Qemu
KVM
OS-level virtualization
containerization takes place at the kernel level. Most modern operating system kernels now support the primitives necessary for containerization, including Linux with openvz, vserver and more recently lxc, Solaris with zones and FreeBSD with Jails.
FreeBSD
http://www.freebsd.org/doc/handbook/jails.html
Solaris
http://docs.oracle.com/cd/E26502_01/html/E29024/preface-1.html#scrolltoc
Linux
openvz http://openvz.org/Main_Page
vserver http://linux-vserver.org/Welcome_to_Linux-VServer.org
lxc https://linuxcontainers.org/
这里主要介绍lxc容器的使用方法
环境:
CentOS6.5 x64
lxc-0.7.5
官方网站:
https://linuxcontainers.org
http://libvirt.org/drvlxc.html
参考文档:
http://wiki.1tux.org/wiki/Centos6/Installation/Minimal_installation_using_yum
http://wiki.1tux.org/wiki/Lxc/Installation/Guest/Centos/6
http://17173ops.com/2013/11/14/linux-lxc-install-guide.shtml
http://www.ibm.com/developerworks/cn/linux/l-lxc-containers/
http://blog.csdn.net/quqi99/article/details/9532105
http://blog.sina.com.cn/s/blog_999d1f4c0101dxad.html
简介:
LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。
LXC可以在操作系统层次上为进程提供虚拟的执行环境,一个虚拟的执行环境就是一个容器,同时可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。
LXC主要包含三个方面:cgroup、network和rootfs。
生命周期和状态
另外:从lxc-wait帮助里可以看到有7种状态:STOPPED, STARTING, RUNNING, STOPPING, ABORTING, FREEZING, FROZEN。
已知的实现lxc的解决方案有2个:liblxc与libvirt
************
libvirt
************
libvirt是Linux上的虚拟化库,是长期稳定的C语言API,支持QEMU/KVM、Xen、LXC等主流虚拟化方案。
操作LXC容器和操作KVM虚拟机一样。
一.应用容器
1.定义lxc XML
root@jun-live:~#cat lxc-test.xml
这里只定义了可用容器的最小化配置,在导入的时候系统会自动生成一份详细的配置文件,默认存放在/etc/libvirt/lxc目录下。
2.导入lxc容器
root@jun-live:~#virsh -c lxc:/// define lxc-test.xml
Domain lxc-test defined from lxc-test.xml
root@jun-live:~#virsh -c lxc:/// list --all
----------------------------------------------------
root@jun-live:~#ls /etc/libvirt/lxc/
lxc-test.xml
修改配置文件要通过以下命令调用VIM来编辑
root@jun-live:~#virsh -c lxc:/// edit lxc-test
3.开启应用实例
root@jun-live:~#virsh -c lxc:/// start lxc-test
Domain lxc-test started
root@jun-live:~#virsh -c lxc:/// list --all
----------------------------------------------------
4.连接应用实例
可以通过console从文本界面连接
root@jun-live:~#virsh -c lxc:/// console lxc-test
Connected to domain lxc-test
Escape character is ^]
sh-4.1# ls
bin
boot
cgroup
sh-4.1# pwd
/
可以看到,LXC的隔离性做的不大好,它对cpu, memory, network的隔离还好一点,但对存储的隔离不够,尤其对于应用容器,甚至可以从lxc虚机可以访问宿主机的根目录。当然,可以自己做一个根文件系统然后使用操作系统容器来隔离。但lxc在这块支持不够,全要自己实现,所以又催生了两个项目docker和dockerlite,似乎弥补了这些不足。
二.OS容器
自定义最小化chroot环境
A.将特定的软件包安装到指定的chroot目录
root@jun-live:~#mkdir /lxc-root
root@jun-live:~#setarch x86_64 bash
root@jun-live:~#yum -y install --installroot=/lxc-root/ dhclient openssh-server passwd rsyslog vim-minimal vixie-cron wget which yum
或者
yum -y --installroot=/lxc-root groupinstall "base"
yum -y --installroot=/lxc-root install dhclient
进入到chroot环境
root@jun-live:~#chroot /lxc-root/
bash-4.1# pwd
/
bash-4.1# ls
bin
boot
1.修改root密码
bash-4.1# echo redhat|passwd --stdin root
2.调试必须的设备文件及相应权限
bash-4.1# rm -rf /dev/null
bash-4.1# mknod -m 666 /dev/null c 1 3
bash-4.1# mknod -m 666 /dev/zero c 1 5
bash-4.1# mknod -m 666 /dev/urandom c 1 9
bash-4.1# mknod -m 600 /dev/console c 5 1
bash-4.1# mknod -m 600 /dev/tty1 c 4 1
bash-4.1# mknod -m 600 /dev/tty1 c 4 2
bash-4.1# mknod -m 600 /dev/tty1 c 4 3
bash-4.1# mknod -m 600 /dev/tty1 c 4 4
bash-4.1# mknod -m 600 /dev/tty1 c 4 5
bash-4.1# mknod -m 600 /dev/tty1 c 4 6
bash-4.1# mknod -m 600 /dev/tty1 c 4 7
bash-4.1# ln -s /dev/urandom /dev/random
bash-4.1# chown root:tty /dev/tty*
bash-4.1# mkdir -p /dev/shm
bash-4.1# chmod 1777 /dev/shm
bash-4.1# mkdir -p /dev/pts
bash-4.1# chmod 755 /dev/pts
3.初始化root登录shell
bash-4.1# cp -a /etc/skel/. /root/
4.设置主机名及网络相关配置
bash-4.1# cat /etc/hosts
127.0.0.1
::1
bash-4.1# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=lxc-centos6
bash-4.1# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTOTO=dhcp
5.生成最小化/etc/fstab
bash-4.1# cat /etc/fstab
/dev/root
none