dockerfile-maven-plugin打包Docker镜像
dockerfile-maven-plugin实际上就是帮我们执行了mvn package、docker build、docker tag和docker push,是可以直接用shell命令的。
首先,修改项目POM文件,引入dockerfile-maven-plugin
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.10</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<username>138*******6</username>
<password>*******</password>
<repository>registry.cn-hangzhou.aliyuncs.com/kojima/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
这里解释以下,goal中的build会随着mvn package一同被执行,所以如果平时想单独打包可以暂时注释掉这个。
下边的用户名密码和仓库都是阿里云仓库账户,可自己申请,还有另一种配置账户的方式,在maven的setting.xml中,从运维安全角度来讲应该是使用这种,可查阅https://github.com/spotify/dockerfile-maven/blob/master/docs/authentication.md。
版本号我们用maven上写好的版本号,以区分镜像版本,JAR_FILE会在Dockerfile中使用,Dockerfile位置就在项目的根目录下:
FROM java:8
EXPOSE 8080
ARG JAR_FILE
ADD ${JAR_FILE} /app.jar
ENTRYPOINT ["java", "-jar","/app.jar"]
项目上我们需要配置的就是这些,接下来还有一些环境配置。
我们要知道docker默认的镜像库由于墙的原因我们是上不去的,所以需要更改镜像地址,而插件默认使用的是本地的docker环境,而如果你本地没有安装docker怎么办?实际上插件默认会访问本地2375端口服务,如果想要访问服务器的配置,在环境变量中配置DOCKER_HOST参数,内容为tcp://XX.XX.XX.XX:2375,当然一般来说这都是在服务器上执行的(2375有漏洞,一般不会对外网开放的),如果想要本地体验一下,那就要自行安装了。新版的Docker Desktop需要安装WSL2,如果没有,启动的时候会报错,我们需要右键任务栏图标,点击setting,取消勾选,然后重启,镜像地址在Docker Engine中可以修改。
配置完成后,分别执行mvn package和mvn dockerfile:push即可。
使用springboot自带的plugin打包
从springboot 2.4开始,springboot也支持docker打包。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<name>192.168.0.20/pig4cloud/${project.artifactId}</name>
<!-- 执行完build 自动push -->
<publish>true</publish>
</image>
<docker>
<host>http://127.0.0.1:2375</host> <!--这里配置本地的,配置服务器的务必在环境变量中添加DOCKER_HOST-->
<tlsVerify>false</tlsVerify>
<publishRegistry>
<username>username</username>
<password>password</password>
<url>registry.cn-hangzhou.aliyuncs.com/kojima/${project.artifactId}</url><!--远程推送仓库-->
</publishRegistry>
</docker>
</configuration>
</plugin>
最后使用mvn spring-boot:build-image执行
这种方式需要翻墙,对于国内用户不是特别理想。可参阅使用spring-boot-maven-plugin构建docker镜像


0 条评论