Docker 容器是否绑定到底层主机操作系统?



作为一个新手,我已经阅读了官方的Docker文档,并遵循了这里的许多解释,教程,视频,但还没有对我的问题给出明确的答案。如果 docker 容器必须使用底层主机操作系统内核,那么他们怎么能声称"在任何地方构建、交付和运行"?我的意思是,基于 Linux 的容器只能在基于 Linux 的主机操作系统机器上运行,与 Windows 容器类似。这是正确的,还是我完全错过了?我不确定是否存在"基于 linux 的容器"和"基于 Windows 的容器"这样的东西。

我可以看到有人声称 java 应用程序可以在任何操作系统上运行,但没有看到如何对 docker 容器提出相同的主张。

容器在同一台计算机上将应用程序彼此隔离,但你是对的,它们都使用底层操作系统。 如果需要不同的操作系统在同一台计算机上运行不同的应用程序,则需要改用虚拟机。 容器很好,因为您可以在单个包中获得运行应用程序所需的一切,并且资源浪费更少,因为您也不会在其中投入整个大型操作系统。

请注意,出于开发目的,在虚拟机中运行容器并不罕见,因此例如,您可以在PC/Mac上运行Linux VM,并轻松地将您在那里开发的容器移动到真正的基于Linux的生产中。

在此处查看时髦的常见问题解答解释:https://docs.docker.com/engine/faq/#how-much-does-engine-cost

简短回答:正确。所有容器共享相同的 linux 内核。如果您依赖于内核特定的功能,Docker 不适合您。除此之外,还有基于 Windows 的映像,理论上您可以携带任何主机内核,只要它满足这些家伙的要求:https://www.opencontainers.org/

还没有业力/街道/代表来评论,所以我正在写一个答案。

首先,我不明白为什么这个问题被如此严重地否决,因为它是合法的,而且 docker 文档没有直接回答。

无论如何。

感谢您抽出宝贵时间澄清一些困惑。因此,在上面的 MS 容器链接中,例如他们说创建一个 Dockerfile,然后运行"docker build ..."。等。"docker"应用程序究竟在哪里运行?在 Windows 主机上?或者在某些 linux(哪种风格/版本?在 Windows 主机上创建的 VM?如果"docker"在 linux VM 上运行,那么它似乎以某种方式能够绕过 linux 操作系统(在 VM 中)并访问底层 Windows 操作系统?同样,我假设"docker"是一个Linux应用程序,而不是在Windows主机上运行的Windows端口。

在这种情况下,Docker将是一个本机Windows应用程序(或Windows端口),将IIS作为本机Windows应用程序运行。

可以这样想:Docker 应用程序虚拟化文件系统,因此安装的每个软件最终都会在这个虚拟文件系统上。内核未虚拟化;因此,正如其他答案所说,如果要将Linux开发环境转移到Windows机器上,则需要

在 PC/Mac 上运行 Linux VM

,然后在该 VM 上运行 Docker。

请参阅 Docker与普通虚拟机有何不同?了解 Docker 上的 megathread 消除混淆。

另请参阅 http://blog.vizuri.com/docker-for-windows-vs.-docker-on-windows-server,它解释了在Windows上运行Docker最令人困惑的部分。如本文所述,您可以使用 Docker on Windows 在 Windows 上运行 Windows 容器,也可以使用 Docker for Windows 在 Windows 上 Docker 管理的 Linux VM 中运行 Linux 容器。Mac也是如此;或者实际上,任何两个不兼容的内核。

最新更新