介绍
正常情况下,我们在开发了一个应用程序后,会使用maven进行打包,生成对应的jar文件。而后,会使用docker将jar文件build成一个镜像(docker image)。之后,就可以在docker daemon中创建基于镜像的容器,并可提供服务了,dockerfile-maven-plugin 插件可以在项目构建的时候自动生成镜像,也可以自动将生成的镜像push到指定的镜像库。
下面示例是构建项目生成jar包,并且使用Dockerfile自动生成镜像。
Dorkerfile文件设置
首先,查看Dorkerfile文件,需要注意ARG JAR_FILE
语句,ARG
指令定义了一个变量JAR_FILE
, 这个变量的值将在dockerfile-maven-plugin 插件的配置中设置。
FROM openjdk:11-jre-slim
WORKDIR /app
ARG JAR_FILE
ADD target/${JAR_FILE} /app/itranswarp.jar
EXPOSE 2019
ENTRYPOINT ["java", "-jar", "/app/itranswarp.jar"]
注解:
- ARG 构建参数的格式是:ARG <参数名>[=<默认值>],Dockerfile 中的 ARG 指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令 docker build 中用 --build-arg <参数名>=<值> 来覆盖。
插件pom配置
其次,查看pom文件的dockerfile-maven-plugin 插件配置。buildArgs元素指定了传递给Dockerfile的参数,比如上面中的JAR_FILE
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>gaoshichao/itranswarp02</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
注解:
execution
指定了该插件build
目标使用默认绑定。默认的,build和tag目标绑定到package阶段,push目标绑定到deploy阶段,这里不涉及tag和push目标。repository
是生成的镜像的repository信息tag
元素指定镜像的tag,这里使用Maven模块的版本号;- buildArgs元素指定了传递给Dockerfile的参数,比如上面Dockerfile中的JAR_FILE.
${project.build.finalName}.jar
是jar包路径,这里使用了最终生成的jar包的文件名
构建
执行构建命令:mvn -DskipTests=true clean package
我们可以看到插件的执行过程也就是build镜像的过程
可以看到镜像也已经生成了:
docker image ls gaoshichao/itranswarp02
跳过插件目标
如果要临时跳过所有的Dockerfile相关的目标,执行如下Maven命令:
mvn clean install -Ddockerfile.skip
如果只是想跳过某一个goal,执行如下Maven命令:
mvn clean package -Ddockerfile.build.skip
mvn clean package -Ddockerfile.tag.skip
mvn clean deploy -Ddockerfile.push.skip
评论区