Spring boot 将war文件打包到多层docker映像中

Spring boot 将war文件打包到多层docker映像中,spring-boot,docker,war,Spring Boot,Docker,War,我试图将一个带有war打包的Spring Boot应用程序放入docker映像中。获取此信息的最简单方法是使用以下Dockerfile: FROM adoptopenjdk/openjdk8:alpine-slim VOLUME /tmp COPY target/demo.war app.war ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"] FROM openjdk:8-jdk-a

我试图将一个带有war打包的Spring Boot应用程序放入docker映像中。获取此信息的最简单方法是使用以下Dockerfile:

FROM adoptopenjdk/openjdk8:alpine-slim
VOLUME /tmp
COPY target/demo.war app.war
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]
FROM openjdk:8-jdk-alpine AS builder
WORKDIR target/dependency
ARG APPWAR=target/*.war
COPY ${APPWAR} app.war
RUN jar -xf ./app.war
RUN mv WEB-INF/lib-provided lib-provided
RUN mv WEB-INF/lib lib

FROM openjdk:8-jre-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY --from=builder ${DEPENDENCY}/lib /app/WEB-INF/lib
COPY --from=builder ${DEPENDENCY}/lib-provided /app/WEB-INF/lib-provided
COPY --from=builder ${DEPENDENCY}/org /app/org
COPY --from=builder ${DEPENDENCY}/resources /app/resources
COPY --from=builder ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=builder ${DEPENDENCY}/WEB-INF /app/WEB-INF

ENTRYPOINT ["java","-cp","/app/WEB-INF/classes:/app/WEB-INF/lib/*:/app/WEB-INF/lib-provided/*","com.company.project.Application"]
按照这种方法,每次更改项目的源代码时,我都会创建一个大的层。另一种方法是将战争划分为不同的docker层,如本文所述:

然而,我担心这只可能与罐子包装,而不是与战争。我说得对吗


提前谢谢

尝试使用Tomcat Docker映像部署您的WAR文件。例如:

FROM tomcat:latest
COPY target/demo.war /usr/local/tomcat/webapps/
参考:


尝试使用Tomcat Docker映像部署您的WAR文件。例如:

FROM tomcat:latest
COPY target/demo.war /usr/local/tomcat/webapps/
参考:


这是我用战争应用程序获得多层docker图像的方法

首先打开war文件,找出哪些文件夹必须复制到映像:

jar -xf youapp.war
在我的项目中,war文件由以下文件夹组成:

/WEB-INF
/META-INF
/resources
/org
基于此,我创建了以下Dockerfile:

FROM adoptopenjdk/openjdk8:alpine-slim
VOLUME /tmp
COPY target/demo.war app.war
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]
FROM openjdk:8-jdk-alpine AS builder
WORKDIR target/dependency
ARG APPWAR=target/*.war
COPY ${APPWAR} app.war
RUN jar -xf ./app.war
RUN mv WEB-INF/lib-provided lib-provided
RUN mv WEB-INF/lib lib

FROM openjdk:8-jre-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY --from=builder ${DEPENDENCY}/lib /app/WEB-INF/lib
COPY --from=builder ${DEPENDENCY}/lib-provided /app/WEB-INF/lib-provided
COPY --from=builder ${DEPENDENCY}/org /app/org
COPY --from=builder ${DEPENDENCY}/resources /app/resources
COPY --from=builder ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=builder ${DEPENDENCY}/WEB-INF /app/WEB-INF

ENTRYPOINT ["java","-cp","/app/WEB-INF/classes:/app/WEB-INF/lib/*:/app/WEB-INF/lib-provided/*","com.company.project.Application"]

我希望它有用

这是我用战争应用程序获得多层docker图像的方法

首先打开war文件,找出哪些文件夹必须复制到映像:

jar -xf youapp.war
在我的项目中,war文件由以下文件夹组成:

/WEB-INF
/META-INF
/resources
/org
基于此,我创建了以下Dockerfile:

FROM adoptopenjdk/openjdk8:alpine-slim
VOLUME /tmp
COPY target/demo.war app.war
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]
FROM openjdk:8-jdk-alpine AS builder
WORKDIR target/dependency
ARG APPWAR=target/*.war
COPY ${APPWAR} app.war
RUN jar -xf ./app.war
RUN mv WEB-INF/lib-provided lib-provided
RUN mv WEB-INF/lib lib

FROM openjdk:8-jre-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY --from=builder ${DEPENDENCY}/lib /app/WEB-INF/lib
COPY --from=builder ${DEPENDENCY}/lib-provided /app/WEB-INF/lib-provided
COPY --from=builder ${DEPENDENCY}/org /app/org
COPY --from=builder ${DEPENDENCY}/resources /app/resources
COPY --from=builder ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=builder ${DEPENDENCY}/WEB-INF /app/WEB-INF

ENTRYPOINT ["java","-cp","/app/WEB-INF/classes:/app/WEB-INF/lib/*:/app/WEB-INF/lib-provided/*","com.company.project.Application"]

我希望它有用

您是对的…War文件不是可执行Jar,需要部署到容器中。使用spring boot可以创建可执行Jar和War文件:您是对的…War文件不是可执行Jar,需要部署到容器中。使用spring boot可以创建可执行Jar和War文件: