我知道 docker 容器不运行自己的内核,而是与主机共享一个内核,这与运行自己的内核的 VM 不同,但是 debian docker 映像和安装了 debian 的 vm 之间的实际区别是什么?
是否有什么可以在一个内部完成但另一个不能完成,或者它们在功能上是否相同,所以在真正的 debian 安装上运行的任何东西都可以在 docker debian 容器内工作?
主机操作系统也会改变吗?如果我在 CentOS 系统上运行 debian 容器,它的工作方式会与 debian 系统上的 debian 容器不同吗?
Docker 容器和 VM 之间的主要实际区别:
Docker 映像只是来自原始系统的基本映像(
debootstap
有助于获取此基本映像),因此它可能(或不)包含内核、initrd ......但是内核、initrd ......没有意义,而不是研究、开发, 其他包依赖。因此,如果它们不是必需的,则可以安全地移除它们。Docker 容器从不同的命名空间开始,这些命名空间隐藏了真实的系统进程、网络连接……不受容器影响。简单来说,你不能
kill
从 Docker 容器到真实的系统进程,但是你可以将 Docker 容器进程看作是来自真实系统的普通进程,并对其进行任何操作。虚拟机组织起来比命名空间概念更困难:所有虚拟机都以由虚拟机软件(VirtualBox,VMware ...)控制的巨大应用程序开始。VM 软件捕获来自该应用程序的所有系统调用并将其传递给真实硬件。因此它们比容器概念慢。Docker 容器提供运行某些应用程序(特定库版本、软件组件...)所需的支持环境,但不提供内核。因此,如果您的应用程序使用新的内核特性,它们将无法工作。
Docker 容器通常不包含完整的系统映像,因为 Docker 概念的主要目标是共享应用程序。VM的主要目标是共享操作系统。
启动特定 Docker 映像的真实系统没有区别(您的应用程序依赖特定内核的情况除外)。