一个Linux应用程序可以使用Docker在Windows上运行吗?

我知道这个问题( 可以托pipe在Windows上的Windows容器? ),但它并不真正回答我的问题。

我是Docker的新手,但是我的问题是这样的 – 如果我将任何Windows应用程序放到Docker容器中,它现在可以在Linux上运行,反之亦然?

Confluent声称它只能在linux上运行,但我的同事使用Docker在Windows上安装它。 所以如果你可以用Docker来安装它,那么整个应用程序肯定会被认为是跨平台的呢?

我想我在这里错过了一些重要的一点。

Docker不是一个虚拟机,它是在共享内核上运行应用程序的一种方式,可以将这些应用程序隔离开来。 Windows二进制文件不能在Linux内核上运行,反之亦然(暂时忽略Windows的Linux运行时)。 因此,如果您使用Windows应用程序构build容器,则只有在Dockers Windows运行时和Windows基本映像上这样做时才会运行该容器。 它不会在Linux主机上运行。

Docker提供的是一个运行Linux的embedded式虚拟机(最初是VirtualBox,但最新版本是HyperV)。 通过运行Docker for Windows,默认情况下,这个虚拟机被使用,你只能运行Linux容器,所以你的Windows应用程序甚至不会在容器中运行。 要运行Windows二进制文件,您需要切换Docker for Windows以使用Windows运行时,并且目前这是一个切换,您不能同时在同一主机上同时运行Linux和Windows运行时。

Docker的Linux安装也没有Windows VM。 如果需要Windows支持,您需要在Linux主机上的一个虚拟机内部安装自己的Windows副本(并获得许可证,这就是为什么Docker不提供这种许可证),并在该虚拟机内运行您的容器。