首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么docker虚拟化比虚拟机更快

为什么docker虚拟化比虚拟机更快
EN

Stack Overflow用户
提问于 2018-11-02 22:01:22
回答 2查看 6.1K关注 0票数 2

据我所知,VM使用硬件虚拟化,而dockers使用软件虚拟化,因此具有更好的性能(在某种情况下,假设我在Windows机器上运行Dockerized Linux )。但是,OS虚拟化比硬件虚拟化更快的确切原因是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-11-02 22:37:37

Docker不做虚拟化。它使用kernel namespaces来实现类似chroot的效果,不仅针对根文件系统,而且针对进程信息(PID名称空间)、挂载点、网络、IPC (共享内存)、UTS信息(主机名)和用户id。

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

票数 8
EN

Stack Overflow用户

发布于 2018-11-02 22:44:07

Docker不是关于虚拟化的。它是关于容器化的(如何在隔离的环境中运行进程)。

这意味着你不能在windows上运行linux容器,或者在linux上一个windows容器,而不使用某种虚拟化(Virtualbox,Hyper-v...)在您的笔记本电脑上进行开发是可以的,但是在生产环境中,您需要为您的容器选择合适的架构。

什么是容器?

来自A sysadmin's guide to containers

传统的Linux容器实际上只是Linux系统上的普通进程。这些进程组使用资源约束将与其他进程组隔离开来:

  • (control groups cgroups)、
  • Linux安全约束(Unix权限、功能、SELinux、AppArmor、seccomp等)、and
  • namespaces (PID、网络、装载等)。

手动设置所有这些(网络名称空间、iptable-rules等)使用linux命令会很棘手,所以当你输入docker ...命令时,docker-daemon的工作就是做这些事情,事情就会在幕后发生……

关于速度。

首先,由于引入的复杂性,容器可能比直接在主机网络堆栈上运行进程的速度要慢。请看下面的示例:Performance issues running nginx in a docker container

但是,他们会为你提供速度。如何?:

  • 容器不是完全的操作系统(基础镜像有小的服务遵循微服务和“做一件事,做好它”的概念。这意味着您不会像处理VM那样将所有内容都放在一个容器中(这称为关注点分离,它会产生更轻量级的应用程序组件。它还为开发人员提供了速度,因为不同的团队可以在他们的组件docker layers 上工作:docker有一种内部方法将图像分割为层,当你构建新的图像时,layers 可以被重用。这为您提供了良好的部署速度(考虑一下这在回滚的情况下有多有用)

关于Windows容器

容器是一种"linux“的东西,但这股集装箱化的浪潮也对Windows领域产生了影响。一开始,docker-toolbox使用Virtualbox在linux上运行容器。后来,引入了docker-for-windows,并提供了直接在主机上或在hyper-v上运行容器的选项。如果你访问Windows Container Types,你可以找到更多。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53119988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档