Java docker是否需要linux映像作为运行嵌入式jetty spring引导war文件的依赖项

Java docker是否需要linux映像作为运行嵌入式jetty spring引导war文件的依赖项,java,spring-boot,docker,embedded-jetty,docker-image,Java,Spring Boot,Docker,Embedded Jetty,Docker Image,我有一个基于jetty的嵌入式spring boot war文件,我可以在我的windows操作系统中使用下面的命令运行它,它工作得很好 java-jar my_app.war 我是docker新手,我想在docker容器中运行我的my_app.war 现在要创建my_app.war的映像,我是否首先需要包含linux映像依赖项,然后添加openjdk8映像 或 我可以单独使用openjdk8图像依赖项直接为我的_app.war创建一个图像?您应该从其中一个图像中查看建筑[here][1] FR

我有一个基于jetty的嵌入式spring boot war文件,我可以在我的windows操作系统中使用下面的命令运行它,它工作得很好

java-jar my_app.war

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

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


我可以单独使用openjdk8图像依赖项直接为我的_app.war创建一个图像?

您应该从其中一个图像中查看建筑[here][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之类的浅色图像,作为一般指针,不要在容器的基本路径中添加或复制文件。

您可以使用这两种方法。 基本上openjdk8也会有一些图像依赖性。 它将直接为您提供openjdk,并解决依赖关系。在使用inux映像时,您必须解决这些依赖关系


参考:是。您需要添加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"]

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

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

FROM tomcat:9.0-jre11-slim

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

显示您的dockerfile。如何创建图像事实上,您希望在docker中运行应用程序。这是某种容器中的一场战争,还是仅仅是一个独立的spring启动应用程序并不重要,不是吗?我会让你的生活尽可能轻松,并按文档所述部署你的应用程序:@Gimby谢谢你的回复。该页面提供了关于如何容器化spring应用程序的良好信息。我的问题是在我的windows操作系统中,我只需要java来运行我的_app.jar,所以当我的_app.jar的映像最终构建并作为docker引擎中的容器启动时。基本上发生了什么?docker是否下载了一个小型linux操作系统,安装了java init,然后在其中启动了my_app.war?感谢您的回复!你能告诉我为什么我需要码头图片吗?因为my_app.war以二进制文件的形式嵌入了jetty容器依赖项,所以我只需要java来运行它。你说得对,不需要jetty映像。我通常选择openjdk:8-alpine中的
,因为它很轻,但是可以浏览一下,看看什么最适合你。很抱歉造成混淆,我将更新我的答案。谢谢您的回复!正如前面提到的,my_app.war只需要java来运行它,并且它在war文件中嵌入了jetty二进制文件。那么我为什么要使用tomcat图像呢?谢谢你的回复!那么,我如何在openjdk8方法和手动方法(解决我的_app.war的所有图像依赖性)之间进行选择呢。你能告诉我哪条路对吗?如果我采用手动方式,可能会遇到哪些挑战?好吧,这取决于使用情况如果你想使用特定的linux映像(例如:fedora、centos、ubuntu)运行,你应该采用手动方式,为了便于使用,请使用预建的openjdk映像。感谢你的回复,我将尝试一下,并告诉你它是否有效