繁体   English   中英

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

[英]Run Different Linux OS in Docker Container?

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM