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