在Docker容器中运行不同的Linux操作系统?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (498)

一直在努力学习Docker,让我感到困惑的是Docker容器中实际运行的Linux(对于主机OS)的不同风格。

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

  • 从逻辑上讲,如果Ubuntu映像足迹大约为550MB,那么Doc​​ker Daemon实际上是从映像注册表下载550MB值的Ubuntu映像以创建容器?
  • 是在容器中运行的Ubuntu实例与我手动下载并安装相同版本没有区别吗?

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

提问于
用户回答回答于

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

这归结为理解Linux 操作系统和Linux 映像之间的区别。你不会在Docker Container中运行完整的Ubuntu操作系统,而是运行Ubuntu的映像。

为了你的问题的目的,请考虑:

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

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

用户回答回答于

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

扫码关注云+社区

领取腾讯云代金券