2015-10-13 286 views
15

一直在努力学习Docker,让我感到困惑的是一种不同的Linux(对于主机操作系统)实际上在Docker容器中运行的方式。在Docker容器中运行不同的Linux操作系统?

如果我们假设我的码头工人主机正在运行RedHat和我从Ubuntu的镜像启动的容器则有以下几种真?:

  • 从逻辑上说,如果Ubuntu的图像占用大约550MB然后将泊坞窗守护进程实际上是下载(从映像注册表)550MB的Ubuntu映像,以创建容器?
  • 是在容器中运行的Ubuntu实例,与我手动下载并安装相同版本的实例没有区别。

我知道Docker容器共享主机操作系统使用的相同内核,并且Docker的基本要点之一就是它使用底层操作系统的容器的效率提升。因此,当你启动一个不同于主机的Linux版本创建的容器时,实际发生的情况我有点困惑。

+4

投票结果应该有一个强制的匿名评论,这样至少像我这样的新手可以评估为什么这个问题应该是不好的。即。不适合所以? – JamieP

回答

28

我认为这个以前的帖子可能会帮助你更多地理解它 - Docker container isolation, does it care about underlying Linux OS?

问题的关键在于,如果主机操作系统是RedHat,那么它就是RedHat内核,它将用于您在Docker容器中运行的任何Linux版本。在你的例子中Ubuntu。

这归结为了解有什么区别一个Linux OS和Linux的图片之间。您不会在Docker Container中运行完整的Ubuntu操作系统,而是运行Ubuntu的映像。

对于你的问题想到的目的: -

OS =内核+文件系统/库
图片 =文件系统/库

Ubuntu的图像您泊坞窗内运行容器只是Ubuntu文件系统/库(不是随Ubuntu OS提供的内核)。在容器中运行的Ubuntu镜像将使用Redhat内核。这部分解释了您从Docker容器获得的效率,该容器利用底层主机的内核(等等)。

+1

感谢您的解释。这已经清理了一下。我只是需要更多地了解Linux。 – JamieP

+0

您是否有使用RHEL6(或Centos6)映像运行RHEL7(或Centos7)OS的经验?你认为这方面可能存在问题吗? – Voltaire

+0

^^^ [我怀疑例如在RHEL7和RHEL6之间的3.10.x和2.6.x内核之间可能存在ABI兼容性问题] – Voltaire

0

在Docker容器内部运行的Ubuntu镜像在所谓的该容器的用户空间中运行。该映像可以对RedHat主机操作系统内核进行内核系统调用(作为从用户空间向某些用户操作的内核空间传输控制的一部分)。由于核心内​​核是通用技术,因此即使从Ubuntu用户空间代码到Redhat内核代码进行调用,系统调用也是兼容的。这种兼容性使得可以在可能都具有不同的基本OS映像的容器之间共享内核。

相关问题