【问题标题】:Run a Java Application with Embedded Jetty Server on Docker在 Docker 上使用嵌入式 Jetty 服务器运行 Java 应用程序
【发布时间】:2020-03-17 02:49:31
【问题描述】:

我是 docker 新手,我有一个在嵌入式码头服务器上运行的 java 应用程序,我想在 docker 容器中运行。 正如我从阅读中了解到的那样,我需要创建一个 dockerfile 来创建图像,然后在容器上运行它。但是现在我在构建 dockerfile 时有点困惑。我应该使用什么基础图像;应该是jetty image还是java8 image?

【问题讨论】:

  • 在 Docker 之外运行应用程序时如何运行它?根据您的描述,如果您的应用程序中已经嵌入了码头,您只需要一个 java8 图像
  • 我从 Eclipse 中将它作为普通的 java 应用程序运行(运行为 -> java 应用程序)

标签: docker dockerfile embedded-jetty


【解决方案1】:

您不需要 Jetty docker 基础映像。您可以使用 jdk 或 jre 基础映像,例如 https://hub.docker.com/_/openjdk

【讨论】:

  • 这是正确的答案@RandaElBehery - 如果您可以在 docker 之外使用标准 java 运行,那么这就是您在 docker 中运行相同的嵌入式码头应用程序所需的全部内容。
【解决方案2】:

如果您不确定从哪个映像开始,请查看这些映像的 Dockerfile 以确定映像中包含或不包含的内容。

在您的情况下,您可以在此处查看其中一张码头图片

https://github.com/appropriate/docker-jetty/blob/997e9496cc30fbc9afee70d7924e6f6a4a93e116/9.4-jre8/Dockerfile

我选择链接基于 openjdk:8-jre 的 Dockerfile,因为它特别符合您的要求。

【讨论】:

  • 这些图像用于使用 ${jetty.home}${jetty.base} 部署概念在独立版本的 Jetty 中运行 web 应用程序。不适合运行 @RandaElBehery 已经使用标准 Java 运行的嵌入式码头应用程序。
【解决方案3】:
  1. 如果可能,请转换您的 application into a spring boot 应用程序。不知道你所说的java应用程序是什么意思。精心制作的。网络应用程序?库? api?
  2. Dockerfile基础镜像拉取由你决定,如果你能打包JAVA,那么你可以理想地在任何地方运行你的容器,不用担心平台运行时间。
  3. 如果您将应用程序转换为 Spring Boot 应用程序,则 Spring Boot 会负责集成和启动码头。无需配置,您需要来自 Dockerfile 上的 FROM。
  4. 简要说明,将您的应用程序转换为 Spring Boot 应用程序,FROM JAVA:, COPY yourjar, RUN yourjar。完成。

【讨论】:

  • java应用程序,我的意思是java应用程序基于java的api,很抱歉如果我目前无法将应用程序转换为spring boot,我该怎么办?
  • 如果不能转换则需要拉两个依赖。 Java和码头或tomcat。两者都包含在您的图像中。然后你把你的 jar 复制到 jetty,然后运行 ​​jetty start。所有这些都将进入您的 Dockerfile。如果您需要样品,请给您一份。虽然在 stackoverflow 中很容易找到。
  • Spring Boot 不是实现@RandaElBehery 制定的最终目标所必需的
  • 从来没有提到这是必要的。这是有利的。由@RandaElBehery 选择哪一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多