将maven构建步骤添加到javajar的docker文件中?

lx0bsm1f  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(331)

我有一个 Java 构建 jar 然后在 Jboss EAP 服务器。这个 jar 文件是使用maven命令生成的:

mvn clean install

目前我正在建造 jar 手动使用 maven 然后把它加到我的 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并自己构建它了?
i、 e.步骤如下:

1. checkout the code from git
2. run dockerfile

我认为最好的方法是使用类似于这里所建议的多阶段构建?然而,我不知道如何实现这一点。

ruyhziif

ruyhziif1#

你可以说在一个文件里做这些!您可以提供说明,先在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做一些类似的事情。我会读到关于这方面的最佳实践。

hmmo2u0o

hmmo2u0o2#

马克·奥康纳对你所联系的问题的回答中的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=buildAS 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

相关问题