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

Jam*_*ieP 43 docker

一直在努力学习Docker,让我感到困惑的一件事就是如何在Docker容器中实际运行不同版本的Linux(到主机操作系统).

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

  • 从逻辑上讲,如果Ubuntu映像占用空间大约为550MB,那么Doc​​ker Daemon是否会实际下载(从映像注册表中)550MB的Ubuntu映像以创建容器?
  • 是否在容器中运行的Ubuntu实例与我手动下载和安装相同版本的情况基本没有什么不同?

我知道Docker容器共享主机操作系统使用的相同内核,Docker的一个基本点是使用底层操作系统的容器效率提升.所以我对启动从不同于主机的Linux版本创建的Container时实际发生的事情感到困惑.

Jac*_*cko 57

我认为这篇上一篇文章可能会帮助你更多地了解它 - Docker容器隔离,是否关心底层Linux操作系统?.

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

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

出于你的问题的目的思考: -

OS =内核+文件系统/库
Image = filesystem/libraries

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

  • 感谢您的解释。这使事情变得有些清醒。我猜只是需要更多地了解Linux。 (2认同)
  • 您是否有使用 RHEL6(或 Centos6)映像运行带有容器的 RHEL7(或 Centos7)操作系统的经验?您认为这方面可能存在问题吗? (2认同)

小智 6

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