我一直在努力学习Docker,有一件事让我感到困惑,那就是不同风格的Linux (对于主机操作系统)实际上是如何在Docker容器中运行的。
如果我们假设我的Docker主机正在运行RedHat,并且我从Ubuntu镜像启动了一个容器,那么以下是真的吗?
我知道Docker容器共享主机操作系统使用的相同内核,并且Docker的一个基本点是它使用底层操作系统提高了容器的效率。因此,我对启动从不同Linux版本而不是主机创建的Container时实际发生的事情感到有点困惑。
发布于 2015-10-14 16:25:23
我认为之前的这篇文章可能会帮助你更好地理解它- Docker container isolation, does it care about underlying Linux OS?。
问题的症结在于,如果主机操作系统是RedHat,那么它就是RedHat内核,它将被您在Docker容器中运行的任何版本的Linux所使用。示例中的Ubuntu。
这归结于理解Linux 和Linux 之间的区别。您将不会在Docker Container中运行完整的Ubuntu操作系统,而是Ubuntu的镜像。
就你的问题而言,想一想:
OS =内核+文件系统/库
镜像=文件系统/库
在Docker容器中运行的Ubuntu镜像只是Ubuntu文件系统/库--它不包含Ubuntu内核。这在一定程度上解释了你从Docker容器中获得的效率,它利用了底层主机的内核(以及其他东西)。
发布于 2018-02-26 03:38:49
在Docker容器中运行的Ubuntu镜像运行在该容器的用户空间中。此映像可以对RedHat主机OS内核进行内核系统调用(作为将某些用户操作的控制权从用户空间转移到内核空间的一部分)。由于核心内核是通用技术,因此即使从Ubuntu用户空间代码调用到Redhat内核代码,系统调用也应该是兼容的。这种兼容性使得跨容器共享内核成为可能,这些容器可能都具有不同的基础操作系统映像。
https://stackoverflow.com/questions/33112137
复制相似问题