【问题标题】:Does docker need a linux image as a dependency to run embedded-jetty spring boot war filedocker 是否需要一个 linux 映像作为依赖项来运行 Embedded-jetty Spring Boot War 文件
【发布时间】:2020-07-19 10:23:11
【问题描述】:

我有一个基于嵌入式码头的 Spring Boot War 文件,我可以使用以下命令在我的 Windows 操作系统中运行它,它工作正常。

java -jar my_app.war

我是 docker 新手,我想在 docker 容器中运行 my_app.war。

现在要创建 my_app.war 的映像,我是否首先需要包含 linux 映像依赖项,然后添加 openjdk8 映像?

单独使用openjdk8镜像依赖可以直接为my_app.war创建镜像吗?

【问题讨论】:

  • 显示你的 dockerfile。你如何创建图像
  • 实际上,您想在 docker 中运行您的应用程序。这是某种容器中的战争还是仅仅是一个独立的 Spring Boot 应用程序并不重要,不是吗?我会让您的生活尽可能轻松,并按照文档部署您的应用程序:spring.io/guides/gs/spring-boot-docker
  • @Gimby 感谢您的回复。该页面提供了有关如何将 Spring 应用程序容器化的良好信息。我的问题是在我的 Windows 操作系统中,我只需要 java 来运行 my_app.jar,所以当 my_app.jar 的图像最终构建并作为 docker 引擎中的容器启动时。基本上会发生什么? docker是不是下载了一个小的linux os,安装了java init,然后在里面启动了my_app.war?

标签: java spring-boot docker embedded-jetty docker-image


【解决方案1】:

您可以同时使用这两种方式。 基本上openjdk8也会有一些镜像依赖。 它会直接为您提供解决依赖关系的 openjdk,以防您必须解决这些依赖关系。

参考:https://hub.docker.com/_/openjdk

【讨论】:

  • 感谢您的回复!那么如何在 openjdk8 方法和手动方法之间进行选择(解决 my_app.war 的所有图像依赖项)。你能告诉我哪个是正确的方法吗?如果我采用手动方法,可能会遇到哪些挑战?
  • 好吧,如果您想使用特定的 linux 映像(例如:fedora、centos、ubuntu)运行,这取决于用例,您应该使用手动方法,为了便于使用,请使用预构建的 openjdk 映像。
【解决方案2】:

您应该考虑使用 [此处][1] 中的一张图片进行构建。

FROM openjdk:8-alpine
ADD ./path/to/war/my_app.war dir-in-container/my_app.war
CMD ["java", "-jar", "dir-in-container/my_app.war"]

这是我的想法,您可能需要稍微摆弄一下。通常选择像 Alpine 这样的轻量级图像,并且作为一般指针,不要在容器的基本路径中添加或复制文件。

【讨论】:

  • 感谢您的回复!你能告诉我为什么我需要码头图像吗?因为 my_app.war 具有二进制形式的嵌入式码头容器依赖项,所以我只需要 java 来运行它。
  • 你是对的,不需要码头图像。我通常选择FROM openjdk:8-alpine,因为它很轻巧,但可以浏览一下,看看什么最适合你。对不起,我会更新我的答案。
【解决方案3】:

是的。你需要添加openjdk图像。

您可以使用 open-jdk-8 构建这样的图像。

FROM openjdk:8-jdk-alpine

VOLUME /tmp

ADD /build/libs/app.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

【讨论】:

  • 感谢您的回复,我会尝试一下,如果它有效,会通知您
【解决方案4】:

我使用 Tomcat 映像作为战争部署的基础:

如果您的项目使用 Java 11 运行,您可以尝试以下 Dockerfile

FROM tomcat:9.0-jre11-slim

COPY target/libs/binsy.war /usr/local/tomcat/webapps/
ENV JAVA_OPTS="-server -Xmx3168m -Xms3168m"

【讨论】:

  • 感谢您的回复!如前所述,my_app.war 只需要 java 来运行它,并且它在 war 文件本身中打包了嵌入式码头二进制文件。那么为什么要使用tomcat镜像呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2023-03-27
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多