Docker引擎如何取代虚拟机监控程序和来宾操作系统?

Docker引擎如何取代虚拟机监控程序和来宾操作系统?,docker,virtual-machine,Docker,Virtual Machine,左边是一个VM和rich tis Docker,我从中得到: Docker引擎怎么能如此轻量级,以至于可以取代来宾操作系统和虚拟机监控程序,并且仍然可以与主机操作系统一起工作?本质上,它只是比虚拟机更有效地翻译不同的应用程序及其依赖关系?我听说Docker引擎使用与主机操作系统相同的内核,但我不知道这意味着什么。实际上,我们用一个Docker引擎替换了多个来宾操作系统和一个虚拟机监控程序的所有依赖项,但我不明白如何做到这一点。Docker引擎是否只是移除了来宾操作系统原本不应该拥有的大量无关内容

左边是一个VM和rich tis Docker,我从中得到:


Docker引擎怎么能如此轻量级,以至于可以取代来宾操作系统和虚拟机监控程序,并且仍然可以与主机操作系统一起工作?本质上,它只是比虚拟机更有效地翻译不同的应用程序及其依赖关系?我听说Docker引擎使用与主机操作系统相同的内核,但我不知道这意味着什么。实际上,我们用一个Docker引擎替换了多个来宾操作系统和一个虚拟机监控程序的所有依赖项,但我不明白如何做到这一点。Docker引擎是否只是移除了来宾操作系统原本不应该拥有的大量无关内容?什么是不必要的无关内容?

容器必须理解为一组使用Linux内核原语(如名称空间和cgroup)实现的独立进程。目前,有5个名称空间:PID、装载、网络、IPC和用户名称空间。简单地说:对于名称空间,进程不能相互看到,除非它们位于同一名称空间中。可以将其视为chroot类型的类固醇装载命名空间。。。这个概念类似于FreeBSD监狱和Solaris区域。 Cgroups是一种为命名空间中一组进程的资源消耗设置限制的方法

Docker只是以自己的方式实现Linux容器,容器运行在union文件系统的层之上,等等


容器运行与主机相同的内核。为了减少内核的攻击面,使用了seccomp和apparmor/selinux等机制来过滤大量系统调用。此外,许多功能被丢弃,以达到一种隔离级别,这使得越狱变得困难。

容器必须被理解为一组使用Linux内核原语(如名称空间和cgroup)实现的隔离进程。目前,有5个名称空间:PID、装载、网络、IPC和用户名称空间。简单地说:对于名称空间,进程不能相互看到,除非它们位于同一名称空间中。可以将其视为chroot类型的类固醇装载命名空间。。。这个概念类似于FreeBSD监狱和Solaris区域。 Cgroups是一种为命名空间中一组进程的资源消耗设置限制的方法

Docker只是以自己的方式实现Linux容器,容器运行在union文件系统的层之上,等等


容器运行与主机相同的内核。为了减少内核的攻击面,使用了seccomp和apparmor/selinux等机制来过滤大量系统调用。此外为了达到隔离级别,很多功能都被丢弃了,这使得越狱变得很困难。

Ricardo的答案是正确的,Docker引擎实际上只是运行在机器上的另一个进程,它只是用提供其他进程隔离所需的各种名称空间配置内核

事实上,我刚刚写了一篇关于这个的博客文章。在这篇文章中,我认为更好的图片应该是下面的图片,到目前为止已经收到了大量反馈。希望这有助于想象里卡多在说什么


里卡多的答案是正确的,因为Docker引擎实际上只是运行在机器上的另一个进程,它只是用提供其他进程隔离所需的各种名称空间配置内核

事实上,我刚刚写了一篇关于这个的博客文章。在这篇文章中,我认为更好的图片应该是下面的图片,到目前为止已经收到了大量反馈。希望这有助于想象里卡多在说什么


docker引擎是在服务器端还是客户端使用,还是两者都使用?如果是这样的话,它在每一方的使用是如何不同的呢?Docker引擎在服务器上创建容器。客户机只是与之交互。在同一主机上使用时,docker客户端通过Unix域套接字与服务器交互。在不同的机器上,您可以使用TLS和身份验证来确保安全。如果您有用于生成代码的机器A和用于托管代码的机器B服务器,它们是否都需要安装docker engine?如果说机器A使用Docker构建图像,然后将其推送到Docker hub,然后机器B提取图像,然后将其作为容器运行,是否正确?是的。目前,Docker Engine包包含客户端和服务器,但该项目在多个级别上被拆分。在二进制端,runc作为客户端,dockerd/containerd作为守护进程。通过Moby项目,现在有了一些功能套件,我们可以组装成乐高积木来实现我们想要的功能。docker引擎是用于服务器端还是客户端,还是两者都使用?如果是这样的话,它在每一方的使用是如何不同的呢?Docker引擎在服务器上创建容器。客户机只是与之交互。什么时候
docker客户端在同一主机上使用,通过Unix域套接字与服务器交互。在不同的机器上,您可以使用TLS和身份验证来确保安全。如果您有用于生成代码的机器A和用于托管代码的机器B服务器,它们是否都需要安装docker engine?如果说机器A使用Docker构建图像,然后将其推送到Docker hub,然后机器B提取图像,然后将其作为容器运行,是否正确?是的。目前,Docker Engine包包含客户端和服务器,但该项目在多个级别上被拆分。在二进制端,runc作为客户端,dockerd/containerd作为守护进程。有了Moby项目,现在我们可以组装成乐高积木来实现我们想要的功能。