Java Docker&x2013;在docker容器内编译maven项目;从那里开始
我有一个运行Vue和Spring Boot的项目,我需要创建一个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
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映像中构建需要很多时间。有没有办法缩短这段时间?