docker主机操作系统和容器基础映像操作系统之间是什么关系?


122

我不确定我在问正确的问题...但是当我阅读所有可以接触到的docker时,我发现可以在Ubuntu 12.04上安装Docker(例如),然后安装一个Fedora容器还是其他版本的ubuntu?(有一个示例,其中用户在容器中安装了busybox。)

当然,我可能完全错了。

但是,我希望基本系统与容器之间存在短暂的连接。

重述:主机操作系统和容器基础映像的操作系统之间是什么关系?

Answers:


100

如BraveNewCurrency所述,主机OS与容器之间的唯一关系是内核。

这是docker虚拟机与“常规”虚拟机之间的主要区别之一,没有开销,一切都直接在主机的内核中进行。

这就是为什么您只能在容器中运行基于Linux的发行版/二进制文件的原因。如果要运行其他内容,这并非不可能,但是您需要在容器内进行某种类型的虚拟化(qemu,kvm等)。

Docker管理作为文件系统表示形式的映像。您可以安装任何Linux发行版,也可以简单地放入二进制文件。

确实,为了方便示例,我们通常依赖于基本映像,但是您也可以在没有任何分发库/二进制文件的情况下创建映像。这样,您将拥有一个非常小而功能强大的容器。

关于发行版的另一点:由于内核仍然是主机的内核,因此发行版将不会提供任何特定的内核模块/补丁。


2
因此,如果主机操作系统是Ubuntu,那么容器也将是Ubuntu?
理查德

21
容器的内核将是ubuntu的内核,仅此而已。您可以轻松地将centos,archlinux,debian或任何其他基于Linux的发行版作为容器运行。
creack

37
尽管此信息可以在docker网站上直接/间接声明,但我真的觉得他们应该使它更清晰一些。我已经完成了主页,概述,交互式教程和大多数基本教程的工作。尽管如此,我对这个话题还是很困惑,并开始假设docker的最佳性能(基于站点的架构图)将要求主机和容器OS匹配。我对“ Linux内核”的概念是陌生的,因此这对我而言并不是立即显而易见的。立刻知道这一点,就使docker成为坏蛋的两倍。
ctrlplusb 2014年

2
Docker是一个非常复杂的项目,利用了高级功能。在某个时候,我们假设用户具有一些知识,例如操作系统和发行版之间的区别。如果您认为这样做会增加价值,则说明文档是开源的,您可以提交拉取请求。
creack

3
这似乎表明只能将OS的用户空间部分(库,命令,应用程序)进行容器化。如果应用程序要求使用不同的内核版本(例如3.10与4.9),则可能无法在容器中运行。那正确吗?
David C.

23

从字面上看,它们唯一的共同点是内核。他们的整个世界(文件系统)在docker容器中。


1

还有另一个考虑因素-即使两个内核都相同,但如果主机操作系统不支持Docker,例如RHEL 6,也会出现问题:https : //access.redhat.com/solutions/1378023

因此,即使映像是Linux映像,您也无法在RHEL 6上启动一个容器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.