根据我对操作系统的理解,操作系统的内核决定了操作系统的身份。但是,docker 容器没有自己的内核。它使用主机操作系统的内核。
所以,我的问题是,当我说我正在运行 Debian 容器时,除了它使用的存储库之外,究竟是什么使它成为 Debian?或者假设我有两个容器。一个是 Debian,另一个是 Ubuntu。现在,除了存储库之外,究竟是什么将它们区分开来?
答案1
Linux 发行版不等于其内核。内核是必需的,但发行版可以工作在一个内核。
分发就是分发创建工作系统所需的所有软件包的一种特定方式。
通常这包括一个包管理器和检索包的特定位置。
由于组装一个可运行的系统的方法有很多,因此每个发行版都会选择所需的基本软件包。一个发行版可能选择使用,basePackage v1.1
而另一个发行版则使用packageBase v7.8
。这两个软件包可能提供大致相同的功能,但工作方式略有不同,这意味着系统的其他部分需要进行调整或配置才能与它们配合使用。
配置文件或文件系统布局也可能存在细微的差别。
通过这种方式,可以构建一个发行版,选择软件包,将它们合并在一起,进行调整以使其适合,并且通常建立在每个系统上都可以预期的一组基本支持软件包。
理论上您可以编译一个完全通用的内核,启用每个模块,然后将其放入任何发行版中。只要内核提供软件包所需的正确功能,它就应该可以正常工作。实际上,这要困难得多,因为系统软件包需要特定的内核功能,如果更改这些功能,它们可能无法正常工作,这种情况在 Linux 内核中经常发生,但理论就是这样的。
使 docker 容器与某个发行版不同的是,其区别在于其中的发行版是如何绑定和配置的。
答案2
容器镜像不是虚拟机,至少在 docker 中不是
它们共享主机内核,因此容器操作系统更多的是一个实用程序/打包因素(apt/yum),而不是其他任何东西。
有一些抽象,你可以将自己的内核放入容器中,但这来自于运行轻量级 kvm 的清晰容器计划
例如,rkt 可以作为第一阶段运行,并提供更像虚拟机的隔离