将 war 文件多层打包成 docker 图像
Packaging war file into docker image in multiple layers
我正在尝试将 Spring 启动应用程序 war 打包到 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"]
按照这种方法,我每次更改项目的源代码时都会创建一个大层。另一种方法是将 war 拆分为不同的 docker 层,如 post 中所述:https://spring.io/blog/2018/11/08/spring-boot-in-a-container#a-better-dockerfile
不过,这恐怕只有jar包才有可能,war就不行了。我说得对吗?
提前致谢。
尝试使用 Tomcat Docker 映像来部署您的 warfile。例如:
FROM tomcat:latest
COPY target/demo.war /usr/local/tomcat/webapps/
参考:
这是我使用 war 应用程序获得多层 docker 图像的方法。
首先打开war文件找出哪些文件夹必须复制到图像:
jar -xf youapp.war
在我的项目中,war 文件由这些文件夹组成:
/WEB-INF
/META-INF
/resources
/org
基于此,我创建了以下Dockerfile:
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"]
希望有用。
我正在尝试将 Spring 启动应用程序 war 打包到 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"]
按照这种方法,我每次更改项目的源代码时都会创建一个大层。另一种方法是将 war 拆分为不同的 docker 层,如 post 中所述:https://spring.io/blog/2018/11/08/spring-boot-in-a-container#a-better-dockerfile
不过,这恐怕只有jar包才有可能,war就不行了。我说得对吗?
提前致谢。
尝试使用 Tomcat Docker 映像来部署您的 warfile。例如:
FROM tomcat:latest
COPY target/demo.war /usr/local/tomcat/webapps/
参考:
这是我使用 war 应用程序获得多层 docker 图像的方法。
首先打开war文件找出哪些文件夹必须复制到图像:
jar -xf youapp.war
在我的项目中,war 文件由这些文件夹组成:
/WEB-INF
/META-INF
/resources
/org
基于此,我创建了以下Dockerfile:
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"]
希望有用。