侧边栏壁纸
博主头像
里奥的博客博主等级

行动起来,活在当下

  • 累计撰写 14 篇文章
  • 累计创建 6 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

maven插件dockerfile-maven-plugin介绍

里奥
2023-12-11 / 0 评论 / 1 点赞 / 147 阅读 / 2782 字

介绍

正常情况下,我们在开发了一个应用程序后,会使用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
1

评论区