为什么Docker虚拟化比VM更快

时间:2018-11-02 14:01:22

标签: docker virtual-machine

据我了解,VM使用硬件虚拟化,而docker使用软件虚拟化,因此具有更好的性能(在某种情况下,我正在Windows机器上运行Dockerized Linux)。但是,操作系统虚拟化比硬件虚拟化更快的原因到底是什么?

谢谢。

2 个答案:

答案 0 :(得分:2)

Docker不进行虚拟化。它不仅使用kernel namespaces来达到类似chroot的效果,不仅对根文件系统有效,而且对进程信息(PID名称空间),安装点,网络,IPC(共享内存),UTS信息(主机名)和用户ID都具有类似的作用。

容器与主机共享内核。为了安全起见,Docker使用AppArmor / SELinux,Linux capabilitiesseccomp来过滤系统调用。控制组(称为cgroups]用于过程记帐和对资源施加限制。

答案 1 :(得分:2)

Docker与虚拟化无关。这与容器化(如何在隔离的环境中运行流程)有关。

这意味着如果不使用某种类型的虚拟化(Virtualbox,Hyper-v。),则不能在Windows上运行linux容器或在Linux上 Windows容器。 。)在开发过程中可以在笔记本电脑上进行此操作,但在生产中,您将为容器选择合适的体系结构。

什么是容器?

来自A sysadmin's guide to containers

  

传统Linux容器实际上只是Linux系统上的常规进程。这些过程组使用资源约束与其他过程组隔离

     
      
  • (对照组[ cgroups ]),
  •   
  • Linux安全约束(Unix权限,功能,SELinux,AppArmor,seccomp等),以及
  •   
  • 命名空间(PID,网络,安装等)。
  •   

使用linux命令手动设置所有这些(网络命名空间,iptable-rules等)会很棘手,因此,当您键入docker ...命令并且事情在幕后发生时,docker-daemon的工作就是做这些...

关于速度...

首先,由于引入的复杂性,容器的速度可能不如直接在主机网络堆栈上运行进程的速度快。例如,请参见:Performance issues running nginx in a docker container

但是,他们会为您提供速度。怎么样?:

  • 容器不是完整的操作系统(基本映像尺寸较小
  • 容器遵循微服务的概念,“做一件事,做好事”。这意味着您不会像使用VM那样将所有内容放入容器中(这称为关注点分离,这会导致应用程序组件更轻巧。这也为开发人员提供了速度,因为不同的团队可以分别处理其组件。
  • 图像层:泊坞窗具有将图像拆分为多个层的内部方法,当您构建新图像时,层可以重复使用。这样可以为您提供良好的部署速度(请考虑在回滚的情况下这很有用)

关于Windows容器

容器是“ Linux”,但这种容器化浪潮也对Windows产生了影响。刚开始,docker-toolbox使用Virtualbox在Linux VM上运行容器。后来,引入了docker-for-windows,并提供了直接在主机或hyper-v上运行容器的选项。如果您访问Windows Container Types,则可以找到更多信息。