最近虚拟化领域Docker炒的沸沸扬扬,一时间不晓得它到底是个什么鬼~ 查阅许久,稍微明白了点:
1,Docker是一种应用虚拟化技术,它是基于Linux内核提供的LXC技术实现的,而传统的虚拟化技术是基于CPU虚拟化的(当然,还有KVM等应用软件虚拟化,这里不讨论)。CPU虚拟化是硬件提供的一种功能,在RING0下引入了RING-1。因此它对于主流OS都是透明的;而Docker是基于Linux内核的LXC技术,这也注定了它上面只能跑Linux的虚拟机,而且跑在上面的虚拟机看到的内核都是宿主的内核。这就是本质区别,具体点:
1.1 CPU虚拟化下的虚拟机,每一个虚拟机完全独立,彼此不受影响。
1.2 Docker下的虚拟机,基于LXC技术,和宿主机共用一个内核(不信?在虚拟机下和宿主机下运行下uname -a就知道了);虚拟机的一个进程直接映射到宿主机的一个进程(在虚拟机下和宿主机下都ps -a试下吧)。但每一个虚拟机看不到其他虚拟机及宿主机的进程,但宿主机可以看到所有虚拟机的进程,而且和自身进程一一对应。这就是Docker效率高的原因之一。
看透了这点基本上就搞明白Docker是个什么鬼了,可惜我在度娘上折腾了半天,愣是没有一个人说明白的,亏我悟性好~
2,Docker是一种更轻量级的虚拟化技术,但它暂时还取代不了CPU虚拟化技术,人家的优势在:
2.1 虚拟机隔离,安全
2.2 OS透明,虚拟机的系统可以是linux、windows,啥都行,Docker只支持linux。不要告诉我windows