1、传统的虚拟化技术
传统的虚拟化技术会在已有主机的基础上创建多个虚拟主机,然后在每个虚拟主机上安装独立的操作系统,并由虚拟主机的内核空间和用户空间来运行应用程序
2、docker容器技术
使用主机的硬件,在硬件之上安装一个操作系统,使用相同的内核。然后将用户空间进行隔离,从而分成多个用户空间,基于一个内核来运行。因为容器使用这种隔离用户空间的方式,使得一样可以提供多个应用程序的环境(而应用程序的环境我们称之为容器),所以可以理解为是用户空间的虚拟化技术 容器拥有更高的资源使用效率,因为其无需为每个应用分配一个独立的操作系统,可以使得应用,资源消耗较小,迁移与创建的速度更小。
区别:kvm,xen隔离的非常好,因为他们有自己的内核空间和用户空间,但是容器技术的话,整个容器只有一个内核,不同的是,各虚拟机之间隔离开的仅仅是用户空间。
在内核级别:完成环境隔离的方法(类似于chroot机制)
我们为了向namespace发起调用,让namespace完成某些操作
一个用户空间可以将整个服务器的CPU耗尽,那么其他用户空间将无法运行,所以仅有名称空间是无法满足,所以有另一个技术,叫CGroup(linux 2.6.24)
CGroup 内核级别的技术,用于限制、控制与分离一个进程组群的资源(用户自己隔离和建立的),用于实现将进程分完组以后,组内的进程能使用多少的系统级的资源,可以在内核级上加以限制 一般用于隔离一个进程集合,为进程分配足够内存带宽然后限制其访问那些设备,从而完成限制机制
CGroup + NameSpace 结合起来就能实现容器功能
可使用 lssbusys - m 查看资源组当中的子系统 cgroup 是基于单根树状结果进行组织的 ,在 /sys/fs/cgroup
UnionFS:能够实现把不同的物理位置的目录能够合并到同一目录中 虽然是合并,但是事实上他是一种叠加。可以合并多个,只有最上层的那个才是可写的。
docker很依赖AUFS,所以如果没有AUFS的话,不建议docker在生产环境上使用 遗憾的是centos并不支持AUFS,在ubuntu上已经支持AUFS
Linux 2.6内核引入的最重要技术之一,用于在内核中支持逻辑卷的通用设备映射技术。
作者:温琦鹏