dockerfile-maven-plugin插件的介绍
dockerfile-maven-plugin
目前这款插件非常成熟,它集成了Maven和Docker,该插件的官方文档地址如下:
地址:https://github.com/spotify/dockerfile-maven
其他说明:
- dockerfile是用来构建Docker项目的,这也是该插件所使用的,它们是强制性的。
将Docker构建过程集成到Maven构建过程中。如果你绑定了默认阶段,当你输入mvn package
命令时,你将得到一个Docker镜像;当你输入mvn deploy
命令时,该镜像将会被推送。- 在pom.xml文件中使用goals标签声明我们想要做什么。这个里面的配置就相当于我们输入了
mvn dockerfile:build
命令后,再输入mvn dockerfile:tag
命令,接着再输入mvn dockerfile:push
命令。- 该插件需要Java 7或更高版本和Apache Maven 3或更高版本(
dockerfile-maven-plugin <= 1.4.6 需要Maven >= 3,其它情况需要Maven >= 3.5.2
)。在实践中要运行集成测试或者使用该插件,需要一个Docker运行环境。
开放远程Docker远程访问端口
# vim /lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2377 -H unix:///var/run/docker.sock在配置项中修改该属性,该方式会直接暴露可以操控docker进程的端口,需要注意安全,修改完后重启docker服务systemctl restart docker
在客户端添加系统环境变量参数
DOCKER_HOST
tcp://xx.xx.xx.xx:2375
为项目添加插件
父项目pom文件
<properties><dockerfile-maven-plugin.version>1.4.13</dockerfile-maven-plugin.version><docker.image.prefix>registry.xx.cn/xx</docker.image.prefix><dockerfile.skip>false</dockerfile.skip><docker.image.tag>1.0.0</docker.image.tag><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><plugin><!-- 每个模块不继承此插件依赖 false--><inherited>true</inherited><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>${dockerfile-maven-plugin.version}</version>
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>default</id>-->
<!-- <phase>package</phase>-->
<!-- <goals>-->
<!-- <goal>build</goal>-->
<!-- <goal>tag</goal>-->
<!-- </goals>-->
<!-- <configuration>-->
<!-- <tag>${project.version}</tag>-->
<!-- </configuration>-->
<!-- </execution>-->
<!-- </executions>--><configuration><!-- 上下文路径配置,此处设置为项目根路径 用来读取Dockerfile--><contextDirectory>${project.basedir}</contextDirectory><!--使用maven setting认证--><useMavenSettingsForAuth>true</useMavenSettingsForAuth><!-- 镜像仓库用户名 --><username>xxxx</username><!-- 镜像仓库密码 --><password>123456</password><!-- 标记 --><tag>${project.version}</tag><!-- 作为Dockerfile文件传入--><buildArgs><no-cache>true</no-cache><pull>true</pull><!-- <JAR_FILE>target/vp-gateway.jar</JAR_FILE> --></buildArgs><!-- 跳过默认标记 --><skipTag>true</skipTag><!-- 强制创建新标记 --><force>true</force><!-- 输出更详细信息 --><verbose>true</verbose><!-- 跳过插件操作 跳过所有的子模块 全局跳过 --><skip>${dockerfile.skip}</skip><!--关闭缓存--><noCache>true</noCache><!-- 自动更新镜像 --><pullNewerImage>true</pullNewerImage><!-- Dockerfile所在目录路径 --><dockerfile>Dockerfile</dockerfile></configuration>
</plugin>
子模块pom目录
<!-- docker打包插件,groupId、artifactId、version表示插件自生的版本信息 -->
<plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>${dockerfile-maven-plugin.version}</version><configuration><repository>${docker.image.prefix}/${project.build.finalName}</repository> <!-- 指定镜像构建后要推送的仓库地址 --><!-- 指定构建镜像的版本tag --><tag>${docker.image.tag}</tag><!-- 不跳过 --><skip>false</skip><buildArgs><!--Maven 构建的 jar 包相对路径和名称--><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration>
</plugin>
Dockerfile文件
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
FROM bellsoft/liberica-openjdk-debian:8-cds
#FROM registry.flow.cn/library/eclipse-temurin:8-jreLABEL maintainer="Zhujj"
ARG APP_NAME=test.jarRUN mkdir -p /appWORKDIR /appCOPY ./target/${APP_NAME}.jar ./app.jar# 环境变量
ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx2048m"EXPOSE ${SERVER_PORT}ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \# 应用名称 如果想区分集群节点监控 改成不同的名称即可#-Dskywalking.agent.service_name=${APP_NAME} \#-javaagent:/app/skywalking/agent/skywalking-agent.jar-#agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:30005 \-XX:+HeapDumpOnOutOfMemoryError ${JAVA_OPTS} \-jar app.jar
打包发布为远程docker镜像
进入到子模块根目录执行下面的命令:
mvn clean install -Pprod dockerfile:build dockerfile:push -DskipTests
-Pprod
指定profile为prod
发布成功之后就可以在仓库上看到自己的镜像了。