【问题标题】:Is it necessary to use Docker in Java?有必要在 Java 中使用 Docker 吗?
【发布时间】:2016-01-05 03:41:34
【问题描述】:

由于Docker目前是一个非常热门的技术,但我只是想知道Java是否需要它?我在下面列出了我的原因,欢迎任何反馈:

  • JVM 就像一个虚拟机,将应用程序与操作系统分开
  • Maven,管理依赖项
  • Spring Boot,支持像tomcat一样嵌入J2EE serverlet容器,所有应用都可以输出为标准JAR文件。

所以,除了需要自己安装 JDK 外,其他一切都是一致且有条理的。我比较 Java 和 Docker,如下所示:

  • JAR -> 图片
  • JVM -> 虚拟机

那么,Docker 真的对 Java 有意义吗?

【问题讨论】:

  • JVM 不会为您提供隔离的文件系统或隔离的网络堆栈。 OTOH,以非 root 用户身份部署更容易/更安全。
  • 比较一个JVM和一个实际的VM是比较苹果和橘子; JVM 只是 Java 的解释器(也可能是 JIT 编译器),VM 是成熟的虚拟机,有自己的硬件和操作系统。

标签: java docker


【解决方案1】:

Java 不需要 Docker。您可以在操作系统上运行 JVM,而不必担心 Docker。

Docker 与 JVM 的相似之处在于它们都是一个虚拟化级别,但将 Docker 提供的虚拟化视为与 JVM 相同可能没有帮助。 Docker 确实是一个方便的工具,可以将多个应用程序/服务打包到一个可移植的容器中。它允许您在多台可能不同的机器上构建相同的虚拟环境,或者破坏虚拟环境并重新启动它。

如果用不同版本的 JVM 运行 jar 文件,可能会得到不同的结果。例如,如果 jar 包含 Java 8 函数,但您尝试在 Java 7 VM 上运行,则会遇到异常。 Docker 的重点是您可以控制版本,这样就不会发生这种情况。

【讨论】:

  • JVM 不是虚拟化的层次……至少在意义上和 Docker 不同
  • 哇哦,我从来不知道 V 代表虚拟化。我只是认为他们把它放在那里是因为它看起来很酷 :-) JVM 的目标是从 CPU 的特定架构中抽象出已编译的代码,这就是字节码的由来。但 VMWare 意义上的虚拟化远不止于此
【解决方案2】:

视情况而定。您的代码有多少版本支持?你如何部署你的代码?有没有使用java以外的数据库和库?

Docker 主要是为了简化开发过程,即使一个开发者的机器与另一台不同。虽然 java 通过使用 jvm 来解决这个问题,但想想当您使用较新 java 版本上的函数,但您的对等方在他的机器上使用较旧 java 版本的情况。上帝禁止它的服务器。

当您与您的 java 应用程序一起启动其他服务时,同样适用。它们将是数据库和其他将被版本控制的服务。尽管 java 的内部库本身由 maven 维护,但它们无法控制您所依赖的其他服务。

简而言之,不,Java 不需要 Docker。它实际上对任何语言都没有必要。它只是在多个开发人员、生产和其他服务之间创建一致性,因此很受欢迎。

【讨论】:

    【解决方案3】:

    您不必在 Java 中使用 Docker,但不是出于您给出的原因。

    Docker 与 JVM 不同! Docker 是关于拥有一个隔离的、易于部署的环境,该环境可从外部进行配置,可以轻松启动、停止和克隆。

    Docker 类似于其他虚拟化技术,例如 VirtualBox 或 VMWare,但绝对不是 JVM。

    您可以使用 Docker 来选择您的操作系统、防火墙设置、JVM 版本等等。您可以使用 Docker 部署 1 个或 1000 个版本的软件。您可以使用 Docker 为客户或同事提供完整的工作环境。

    JVM 不这样做。

    哦,还有安全隐患。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 2020-06-04
      • 2013-05-09
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      相关资源
      最近更新 更多