将 Maven 构建步骤添加到 Java Jar 的 docker 文件中?
Adding Maven build steps into docker file for Java Jar?
我有一个 Java
项目,它构建一个 jar
文件,然后 运行 在 Jboss EAP
服务器上。 jar
文件是使用maven命令构建的:
mvn clean install
目前我正在使用 maven
手动构建 jar
然后将其添加到我的 dockerfile
中,如下所示:
# rest of dockerfile...
EXPOSE 8080 9990
ADD app.jar "/opt/jboss/jboss-eap-6.2/standalone/deployments/"
RUN ["chmod", "+rx", "/opt/jboss/jboss-eap-6.2/"]
ENTRYPOINT ["sh","/opt/jboss/jboss-eap-6.2/bin/standalone.sh"]
如何将 maven
命令添加到我的 dockerfile
中,以便开发人员 不需要 先安装 maven 并自己构建它?
即步骤将是:
1. checkout the code from git
2. run dockerfile
我认为最好的方法是使用类似于此处建议的 ?但是我不确定如何实现它。
to the question you've linked to should be very close to what you need. Those are multistage builds 中的 Dockerfile 示例,因为其中有多个 FROM
。第一阶段使用已经包含maven的基础镜像,所以不需要安装它:FROM maven:3.6.0-jdk-11-slim AS build
.
您当前的 Dockerfile 内容将成为第二阶段,但您需要将 ADD app.jar ...
替换为 COPY
,这会从 build
阶段中挑选文件。像
COPY --from=build /path/to/mvn/output/app.jar \
/opt/jboss/jboss-eap-6.2/standalone/deployments/
--from=build
指的是前期的AS build
。构建阶段的其他文件不会复制到后期阶段,因此最终图像将仅包含最后 FROM
之后的图层。
编辑添加:解决这如何防止其他用户需要手动进行任何构建和安装的问题:新用户可以这样做。假设 Dockerfile 位于您的 git 项目的根目录中。
git clone <url> your-app
docker build -t your-img your-app # builds all stages
docker run --rm -it your-img # runs whatever the final stage produced
您可以说在 Dockerfile 中完成所有这些工作!您可以先提供在 Dockerfile 中安装 maven 的说明,然后 运行 从已安装的 maven 中需要任何命令。
例如,
RUN cd /usr/local && wget -O- http://mirror.ox.ac.uk/sites/rsync.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz | tar -xzf -
安装 maven 3.6.3,然后 运行 执行您需要的命令,无论它是 maven clean 还是其他。
我只是提供了上面的命令,因为我有它,但是如果你想要的版本在 yum 中可用,另一种方法就是使用安装的任何包管理器。喜欢 RUN yum --assumeyes install ________
.
您应该可以用 Git 做类似的事情。我会阅读相关的最佳实践。
我有一个 Java
项目,它构建一个 jar
文件,然后 运行 在 Jboss EAP
服务器上。 jar
文件是使用maven命令构建的:
mvn clean install
目前我正在使用 maven
手动构建 jar
然后将其添加到我的 dockerfile
中,如下所示:
# rest of dockerfile...
EXPOSE 8080 9990
ADD app.jar "/opt/jboss/jboss-eap-6.2/standalone/deployments/"
RUN ["chmod", "+rx", "/opt/jboss/jboss-eap-6.2/"]
ENTRYPOINT ["sh","/opt/jboss/jboss-eap-6.2/bin/standalone.sh"]
如何将 maven
命令添加到我的 dockerfile
中,以便开发人员 不需要 先安装 maven 并自己构建它?
即步骤将是:
1. checkout the code from git
2. run dockerfile
我认为最好的方法是使用类似于此处建议的
FROM
。第一阶段使用已经包含maven的基础镜像,所以不需要安装它:FROM maven:3.6.0-jdk-11-slim AS build
.
您当前的 Dockerfile 内容将成为第二阶段,但您需要将 ADD app.jar ...
替换为 COPY
,这会从 build
阶段中挑选文件。像
COPY --from=build /path/to/mvn/output/app.jar \
/opt/jboss/jboss-eap-6.2/standalone/deployments/
--from=build
指的是前期的AS build
。构建阶段的其他文件不会复制到后期阶段,因此最终图像将仅包含最后 FROM
之后的图层。
编辑添加:解决这如何防止其他用户需要手动进行任何构建和安装的问题:新用户可以这样做。假设 Dockerfile 位于您的 git 项目的根目录中。
git clone <url> your-app
docker build -t your-img your-app # builds all stages
docker run --rm -it your-img # runs whatever the final stage produced
您可以说在 Dockerfile 中完成所有这些工作!您可以先提供在 Dockerfile 中安装 maven 的说明,然后 运行 从已安装的 maven 中需要任何命令。
例如,
RUN cd /usr/local && wget -O- http://mirror.ox.ac.uk/sites/rsync.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz | tar -xzf -
安装 maven 3.6.3,然后 运行 执行您需要的命令,无论它是 maven clean 还是其他。
我只是提供了上面的命令,因为我有它,但是如果你想要的版本在 yum 中可用,另一种方法就是使用安装的任何包管理器。喜欢 RUN yum --assumeyes install ________
.
您应该可以用 Git 做类似的事情。我会阅读相关的最佳实践。