Java Docker&x2013;在docker容器内编译maven项目;从那里开始

Java Docker&x2013;在docker容器内编译maven项目;从那里开始,java,maven,spring-boot,docker,Java,Maven,Spring Boot,Docker,我有一个运行Vue和Spring Boot的项目,我需要创建一个docker compose.yml文件来运行mvn clean install来生成.jar,然后从docker容器内的另一个docker文件中构建一个“新”映像 这是完成mvn清洁安装后需要运行的Dockerfile: FROM java:8 ENV WKHTML_VERSION 0.12.4 # Builds the wkhtmltopdf download URL based on version numbers abo

我有一个运行Vue和Spring Boot的项目,我需要创建一个
docker compose.yml
文件来运行
mvn clean install
来生成
.jar
,然后从docker容器内的另一个docker文件中构建一个“新”映像

这是完成
mvn清洁安装后需要运行的Dockerfile:

FROM java:8

ENV WKHTML_VERSION 0.12.4

# Builds the wkhtmltopdf download URL based on version numbers above
ENV DOWNLOAD_URL "https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTML_VERSION}/wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz"

RUN apt-get update && \
    apt-get install -y --no-install-recommends wget && \
    wget $DOWNLOAD_URL && \
    tar vxf wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz && \
    cp wkhtmltox/bin/wk* /usr/local/bin/ && \
    cp wkhtmltox/lib/* /usr/local/lib/ && \
    rm wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz

# @see https://spring.io/guides/gs/spring-boot-docker/
COPY   server/target/redo-server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
因此,构建步骤需要如下所示:

  • 安装node+maven/pull这些映像
  • 安装
    postgresql
    &拉取该映像
  • 运行
    mvn clean install
    &生成
    .jar
  • 从上面提到的
    Dockerfile
    构建新映像并运行它
我是新来的
docker compose
,所以我很难按照正确的执行顺序设置它

我之所以需要这样做,是因为生产管道没有运行完整maven应用程序(
Vue.js
Spring Boot
app)所需的
节点或npm
,这就是为什么需要从Docker容器内部编译它的原因


如果有人能为我指出正确的方向,我将不胜感激,更不用说——这可能吗

通过将多步骤构建作为我的Dockerfile来解决。我正在将节点作为依赖项安装到客户端的pom.xml文件中

# Install maven and copy project for compilation
FROM maven:latest as builder

COPY pom.xml /usr/local/pom.xml
COPY server /usr/local/server
COPY client /usr/local/client
WORKDIR /usr/local/

RUN mvn clean install


FROM openjdk:8
ENV WKHTML_VERSION 0.12.4
# Builds the wkhtmltopdf download URL based on version numbers above
ENV DOWNLOAD_URL "https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTML_VERSION}/wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz"

RUN apt-get update && \
    apt-get install -y --no-install-recommends wget && \
    wget $DOWNLOAD_URL && \
    tar vxf wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz && \
    cp wkhtmltox/bin/wk* /usr/local/bin/ && \
    cp wkhtmltox/lib/* /usr/local/lib/ && \
    rm wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz

COPY   --from=builder /usr/local/redo/server/target/server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

通过编写一个多步骤构建作为我的Dockerfile来解决这个问题。我正在将节点作为依赖项安装到客户端的pom.xml文件中

# Install maven and copy project for compilation
FROM maven:latest as builder

COPY pom.xml /usr/local/pom.xml
COPY server /usr/local/server
COPY client /usr/local/client
WORKDIR /usr/local/

RUN mvn clean install


FROM openjdk:8
ENV WKHTML_VERSION 0.12.4
# Builds the wkhtmltopdf download URL based on version numbers above
ENV DOWNLOAD_URL "https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTML_VERSION}/wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz"

RUN apt-get update && \
    apt-get install -y --no-install-recommends wget && \
    wget $DOWNLOAD_URL && \
    tar vxf wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz && \
    cp wkhtmltox/bin/wk* /usr/local/bin/ && \
    cp wkhtmltox/lib/* /usr/local/lib/ && \
    rm wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz

COPY   --from=builder /usr/local/redo/server/target/server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

在maven映像中构建需要很多时间。有没有办法缩短这段时间?在maven映像中构建需要很多时间。有没有办法缩短这段时间?