【问题标题】:Run Different Linux OS in Docker Container?在 Docker 容器中运行不同的 Linux 操作系统?
【发布时间】:2018-06-04 05:18:05
【问题描述】:

一直在尝试学习 Docker,让我感到困惑的一件事是,一种不同风格的 Linux(对于主机操作系统)实际上是如何在 Docker 容器中运行的。

如果我们假设我的 Docker 主机正在运行 RedHat,并且我从 Ubuntu 映像启动一个容器,那么以下情况是否属实?:

  • 从逻辑上讲,如果 Ubuntu 映像占用空间约为 550MB,那么 Docker 守护程序实际上会下载(从映像注册表)价值 550MB 的 Ubuntu 映像以创建容器吗?
  • 在容器中运行的 Ubuntu 实例与我手动下载并安装相同版本的情况本质上没有区别吗?

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

【问题讨论】:

  • 投票反对应该有一个强制性的匿名评论,这样至少像我这样的新手可以判断为什么这个问题被认为是不好的。 IE。不适合 SO?

标签: docker


【解决方案1】:

我认为上一篇文章可能会帮助您进一步了解它 - Docker container isolation, does it care about underlying Linux OS?

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

这归结为了解 Linux OS 和 Linux Image 之间的区别。您不会在 Docker 容器内运行完整的 Ubuntu 操作系统,而是运行 Ubuntu 的映像。

出于您的问题的目的,请考虑:-

操作系统 = 内核 + 文件系统/库
图像 = 文件系统/库

在 Docker 容器中运行的 Ubuntu 映像只是 Ubuntu 文件系统/库 - 它不包含 Ubuntu 内核。这部分解释了您从利用底层主机的内核(除其他外)的 Docker 容器中获得的效率。

【讨论】:

  • 感谢您的解释。这让事情有点清楚了。我猜只是需要更多地了解 Linux。
  • 您是否有使用 RHEL6(或 Centos6)镜像的容器运行 RHEL7(或 Centos7)操作系统的经验?您认为这方面可能存在问题吗?
  • ^^^ [例如我怀疑 RHEL7 和 RHEL6 之间的 3.10.x 和 2.6.x 内核之间可能存在 ABI 兼容性问题]
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2020-09-12
    • 2020-03-08
    相关资源
    最近更新 更多