Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Docker有两种类型的Docker引擎_Java_Docker_Jvm_Containers_Virtual Machine - Fatal编程技术网

Java 为什么Docker有两种类型的Docker引擎

Java 为什么Docker有两种类型的Docker引擎,java,docker,jvm,containers,virtual-machine,Java,Docker,Jvm,Containers,Virtual Machine,根据Docker理论,将“Docker引擎”放在应用层和平台之间(下图中该层用蓝色标记),有助于使应用层与平台独立 这似乎非常类似于JVM的概念。它有助于使Java成为独立于平台的语言 问题- 那么,为什么Docker有两种引擎(Linux和Windows引擎) 我的理解- 这种方式违反了“平台独立”的基本概念 你能帮我澄清一下我的理解吗?平台独立性是用于包装应用程序的容器,而不是引擎本身 Docker的整个思想是用它的依赖项包装应用程序,以便它可以部署在安装Docker的任何机器上 Dock

根据Docker理论,将“Docker引擎”放在应用层和平台之间(下图中该层用蓝色标记),有助于使应用层与平台独立

这似乎非常类似于JVM的概念。它有助于使Java成为独立于平台的语言

问题-

  • 那么,为什么Docker有两种引擎(Linux和Windows引擎)
  • 我的理解-

  • 这种方式违反了“平台独立”的基本概念
    你能帮我澄清一下我的理解吗?

    平台独立性是用于包装应用程序的容器,而不是引擎本身

    Docker的整个思想是用它的依赖项包装应用程序,以便它可以部署在安装Docker的任何机器上

    Docker最初只针对Linux发行版启动。然后扩展到允许用户在Windows/MAC上运行容器。这是通过在Windows/MAC上安装Docker时在后台部署一个迷你Linux虚拟机实现的。Docker引擎将在这个Linux虚拟机中运行,所有容器也将在那里运行

    原因是容器需要操作系统内核级别的支持,最初只有Linux支持。然后大公司开始意识到社区对Docker的优势和巨大兴趣。因此,Windows决定进行必要的操作系统开发,使Docker引擎在Windows 10上本机运行


    简言之,平台独立性是从应用程序容器的角度考虑的。在Linux上运行的Docker容器也可以在Windows上运行,无需任何更改。这与特定于操作系统的JVM非常相似,但是相同的java应用程序可以在安装JVM的任何地方运行。

    我不是专家,但我认为这两个引擎设计用于在两个不同的操作系统上运行。有点像你不能直接在Windows*上运行为Linux构建的JVM,或者相反。(*我不算WSL:-)你可以在这里找到一些基本信息:。您不应该将Docker视为“独立于平台”,因为它是操作系统级虚拟化。也许您指的是docker的关键概念,它使开发人员可以轻松地将所有依赖项打包到一个映像,并在不同的环境(开发/登台/生产)上运行它,而不会出现诸如“它在我的机器上工作,为什么在你的机器上不工作?”或“它在本地工作,但在生产服务器上不工作”之类的问题.我们不需要更改DockerFile吗?如前所述,DockerFile可能包含Linux内核命令。例如,
    运行ls