Docker和其他VM技术有什么不同?

编程小猪
  • 37

最近发现Docker很火啊,好像所有的服务都可以放到Docker里面来跑。貌似Docker也分很多不同的系统,Docker也是一种虚拟机(VM)技术吗?我看Docker的镜像都很小,是不是一种简化的虚拟机呢?

回复
阅读 12.8k
5 个回答

docker相对于全虚拟化和半虚拟化而言,是所谓的操作系统级别的轻量级虚拟化技术。传统的虚拟化技术要生成一个环境的时间非常久,对于docker来说启动和销毁都是秒级的,而且它底层依赖的技术lxc(linux container)完全是内核特性,没有任何中间层开销,对于资源的利用率极高性能接近物理机。当然由于现在docker依赖于lxc,所以你只能在Linux上跑它(现在mac osx也支持,但是也只是用了virtualbox搞了个linux虚拟机啊罢了,相信我,现在在mac上使用它没有任何意义,即使为了docker开发,我也认为vagrant更合适,昨天刚尝试了一把boot2docker这个mac工具,体验真是不好)。

题主所谓的不同的系统其实是一个docker维护的镜像,对于lxc来说这个并不需要,但是docker维护了这套镜像更方便保存应用环境,做到无依赖的环境分发。另外你说的docker镜像都很小并不准确,docker的镜像大小是应用决定的,你可以让你的镜像保存任意东西,也就是可以是任意大小的。

docker是不是什么都适合做,目前来看并不是,对于精度要求很高的计费任务来说docker还不合适,但是对于普通的PaaS足够了,而且docker目前发展很迅速,相信特性的增强会很快。

Docker是一种应用容器,你可以把它理解为集装箱,就是把包括应用和应用的依赖在内的整个环境都打包在一起,这样安装部署也方便,同时每个开发人员使用的是统一的版本,不会因为依赖版本不同而踩到坑,也不用费心自己维护版本。

64位Linux上,Docker没有用虚拟机,所以性能很好。在64位的Linux系统以外的系统上(包括Windows,Mac OS X),Docker利用了虚拟机技术。

docker做到了PAAS即平台即服务,docker在64位linux上使用的是lxc内核虚拟化也就是轻量级的虚拟化,与VM相比不需要对硬件进行仿真就可以共享跟主机一样的操作系统,并且有AUFS和lXC来虚拟化,加入一个ubuntu的镜像是265MB,你要再VM主机新建1000个就需要265000MB内存,但是docker共享容量也就需需要256多一点,如果你在linux上跑VMware相信你会看主机内存的消耗是比较大的,一个亚马逊EC2 512MB内存单核的云主机开5个docker无压力,你要是跑5个vmware那可费劲了

Docker 是基于 LXC 的,它属于进程级的虚拟化方案,从宿主的机器看,每个运行的 Docker 都是一个进程。

Xen/OpenVZ 这类是系统级的虚拟化方案。从宿主的机器看,允许都是一个一个虚拟机。

这里有个更详细的比较:http://goldmann.fedorapeople.org/tmp/docker-preso/#/5

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏