设为首页 收藏本站
查看: 670|回复: 0

[经验分享] 虚拟机和docker的区别

[复制链接]

尚未签到

发表于 2018-5-29 08:32:22 | 显示全部楼层 |阅读模式
  宿主如果和容器系统不同的话,那不是和虚拟机一样,一层层的调用,那么Docker和虚拟机还有什么差别?
  

  要把 Windows 和 Linux 分清楚,更要把内核(kernel)和用户空间(userland)分清楚。
  

  容器内的进程是直接运行于宿主内核的,这点和宿主进程一致,只是容器的userland不同,容器的userland由容器镜像提供,也就是说镜像提供了 rootfs。
  

  假设宿主是 Ubuntu,容器是 CentOS。CentOS 容器中的进程会直接向 Ubuntu 宿主内核发送 syscall,而不会直接或间接的使用任何 Ubuntu 的userland的库。
  

  这点和虚拟机有本质的不同,虚拟机是虚拟环境,在现有系统上虚拟一套物理设备,然后在虚拟环境内运行一个虚拟环境的操作系统内核,在内核之上再跑完整系统,并在里面调用进程。
  

  还以上面的例子去考虑,虚拟机中,CentOS 的进程发送 syscall 内核调用,该请求会被虚拟机内的 CentOS 的内核接到,然后 CentOS 内核访问虚拟硬件时,由虚拟机的服务软件截获,并使用宿主系统,也就是 Ubuntu 的内核及userland的库去执行。
  

  而且,Linux 和 Windows 在这点上非常不同。Linux 的进程是直接发 syscall 的,而 Windows 则把 syscall 隐藏于一层层的 DLL 服务之后,因此 Windows 的任何一个进程如果要执行,不仅仅需要 Windows 内核,还需要一群服务来支撑,所以如果 Windows 要实现类似的机制,容器内将不会像 Linux 这样轻量级,而是非常臃肿。看一下微软移植的 Docker 就非常清楚了。
  

  所以不要把 Docker 和虚拟机弄混,Docker容器只是一个进程而已,只不过利用镜像提供的rootfs提供了调用所需的userland库支持,使得进程可以在受控环境下运行而已,它并没有虚拟出一个机器出来。
  

  参考:
  

  https://www.docker.com/what-docker
  

  原文链接:http://twang2218.coding.me/post/docker-2016-07-14-faq.html#%E5%AE%BF%E4%B8%BB%E5%A6%82%E6%9E%9C%E5%92%8C%E5%AE%B9%E5%99%A8%E7%B3%BB%E7%BB%9F%E4%B8%8D%E5%90%8C%E7%9A%84%E8%AF%9D%E9%82%A3%E4%B8%8D%E6%98%AF%E5%92%8C%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%80%E6%A0%B7%E4%B8%80%E5%B1%82%E5%B1%82%E7%9A%84%E8%B0%83%E7%94%A8%E9%82%A3%E4%B9%88docker%E5%92%8C%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%BF%98%E6%9C%89%E4%BB%80%E4%B9%88%E5%B7%AE%E5%88%AB
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-482362-1-1.html 上篇帖子: 让docker容器和宿主机使用同一网段 下篇帖子: docker为什么不用固定ip以及修改host文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表