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

标签 docker

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

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

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

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

最佳答案

我认为上一篇文章可能会帮助您进一步理解它 - 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 容器中获得的效率。

关于docker - 在 Docker 容器中运行不同的 Linux 操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33112137/

相关文章:

unix - Docker:如何使用CMD []中的重定向(命令>> file.txt)?

java - 如何在 Docker 容器中安装/添加 jdk 7

docker - Ping不会安装在Docker容器中

hadoop - 如何配置Spark和OpenMPI集群共存的优先级?

shell - 重用继承图像的 CMD 或 ENTRYPOINT

docker - 如何使用 REST API 设置 Docker 容器的名称

docker - docker:在gitlab-ci中找不到命令

php - Symfony 4 Doctrine无法连接到Docker MySQL

docker - 如何检查容器是否是最新的

git - 如何使用 Dockerfile 克隆 git repo