debian docker 容器和 debian VM 内部有哪些实际(非技术)差异?

debian docker 容器和 debian VM 内部有哪些实际(非技术)差异?

我知道 docker 容器不运行自己的内核,而是与主机共享一个内核,这与运行自己的内核的虚拟机不同,但是 debian docker 映像和安装了 debian 的虚拟机之间有什么实际区别?

是否有什么可以在一个容器内完成但另一个不能完成的事情,或者它们在功能上是否相同,因此在真正的 debian 安装上运行的任何东西都可以在 docker debian 容器内运行?

主机操作系统也会改变什么吗?如果我在 CentOS 系统上运行 debian 容器,它的工作方式是否与 debian 系统上的 debian 容器不同?

答案1

Docker容器和VM之间的主要实际区别:

  1. Docker 镜像只是来自原始系统的基础镜像(debootstap有助于获取此基础镜像),因此它可能(或不)包含内核、initrd ...但是内核、initrd ...没有意义,而不是研究、开发,其他包依赖项。因此,如果不需要它们,则可以安全地删除它们。

  2. Docker 容器以不同的方式启动名称空间隐藏真实的系统进程、网络连接……免受容器影响。简单来说,你无法kill从 Docker 容器中看到真实的系统进程,但你可以将 Docker 容器进程视为来自真实系统的普通进程,并用它做任何事情。 VM组织起来更困难而不是名称空间概念:所有虚拟机都以巨大的应用程序开始,由虚拟机软件(VirtualBox、VMware ...)控制。 VM 软件捕获来自该应用程序的所有系统调用并将其传递给真实硬件。因此它们比容器概念慢。

  3. Docker 容器提供支持需要运行某些应用程序(特定库版本、软件组件...)但不需要运行内核的环境。因此,如果您的应用程序使用新的内核功能,它们将无法工作。

  4. Docker 容器通常不包含完整的系统映像,因为 Docker 概念的主要目标是共享应用程序。 VM的主要目标是共享操作系统。

启动特定 Docker 映像的真实系统没有区别(除非您的应用程序依赖于特定内核的情况)。

相关内容