300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > maven集成docker插件进行打包镜像并推送私服

maven集成docker插件进行打包镜像并推送私服

时间:2021-03-02 21:48:49

相关推荐

maven集成docker插件进行打包镜像并推送私服

使用maven进行集成docker打包成镜像以及推送到docker私服

先水几句

我不会开场啊…默默无闻的送码人.不是吧不是吧.现在还有人用maven打包,然后手动上传jar.然后进行部署吗?你out了.还是用Jenkins集成gitlab进行CI/CD.但是今天要说的是,使用maven进行集成docker插件进行打包镜像.(强行拉回正题,水文真的是除了敲代码之外极佳的爱好了 /捂脸)

docker的好处自然不比赘述.直接准备进入正题.

公司项目就准备使用docker+k8s进行项目部署.周一给我分了一个任务.就是将项目进行发布到docker,并且推送到自建的私服.搭建私服的步骤就不再说了.网上有很多优秀的博客.跟着博客走,搭建起来问题不大.

好,假装已经开好头了.接下来进入正题

docker插件

目前比较流行的maven-docker插件的话.有几种.spotify和fabric8io.我查阅了一些博客后,发现spotify是使用比较多的.所以今天,我们也是使用这款插件来进行打包.

实际使用

1.安装docker,并开启远程访问

怎么安装docker也不多说了.应该是比较简单了.正常安装后,正常启动.然后修改一下配置文件.开启docker的远程访问.

vi /lib/systemd/system/docker.service

然后会出现一段配置,如下图所示:

修改上面的框出来的地方.修改成我这样.

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

(我就知道程序员懒,直接复制给你们)

然后 :wq 保存退出.

然后就刷新配置

systemctl daemon-reload

重启docker

service docker restart

然后呢,就自己curl测试一下,看是否成功了.

curl http://your's ip:2375/version

出现下面这段描述,就表示成功了.不然的话,就回头重新看看是不是哪里配置错了.比较简单.就不多说了.

maven添加docker插件

<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>${project.artifactId}:latest</imageName><baseImage>java</baseImage> <!--基于java构建--><entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint><dockerHost>http://your's ip:2375</dockerHost><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><forceTags>true</forceTags> <!--重复构建相同镜像则覆盖镜像--></configuration></plugin>

将上述代码写入项目的pom.xml文件中,添加到下的标签下.

然后maven import.如果是基于idea开发的话,那么在maven tabs中就可以出现这个插件了.

然后双击docker:builder 就可以实现打包到docker生成镜像images.

然后通过docker run xxx. 就可以将镜像生成容器,进行项目部署了.

或者使用命令行 mvn clean package docker:build 也可以进行操作

将docker命令绑定到maven命令

上面已经可以成功发布镜像到docker容器中了.如果不想这样操作.(因为麻烦),省事,想在maven打包的时候进行发布镜像呢.我们可以通过将docker的一些命令进行绑定到maven的某些命令上.

继续操作pom.xml.

使用标签可以让我们很容易将docker命令绑定到maven命令上.

<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><executions><execution><id>build-image</id><!--定义一个执行命令的id--><phase>package</phase> <!--绑定mvn的哪个命令--><goals><goal>build </goal> <!--要执行的命令 --></goals></execution></executions><configuration><imageName>${project.artifactId}:latest</imageName><baseImage>java</baseImage> <!--基于java构建--><entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint><dockerHost>http://your's ip:2375</dockerHost><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><forceTags>true</forceTags> <!--重复构建相同镜像则覆盖镜像--></configuration></plugin>

分别使用,,,,,来将docker命令绑定到maven的某个命令上.

这里我们操作了将docker:build 绑定到maven package命令上.

这样的话.我们就可以不用再进行点击maven package 然后又麻烦的再点击docker:build了.

命令行操作的话,也就简化成了 mvn clean package

推送到docker私服仓库

如果我们需要把镜像推送到仓库.首先我们需要给镜像打一个标签.tag(不细说了,因为我不会,假装大家伙都知道,我就是个菜鸡)否则打包会报错

这边的话呢.就需要我们先使用docker tag xxx 为该镜像打一个标签. 然后再使用docker push进行推送了.

但是上一小节说到可以将docker命令绑定到maven命令上.所以借助插件.也不需要我们进行手动的命令操作了. 上代码

<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><executions><execution><id>build-image</id><!--定义一个执行命令的id--><phase>package</phase> <!--绑定mvn的哪个命令--><goals><goal>build </goal> <!--要执行的命令 --></goals></execution><execution><id>image-tag</id><phase>package</phase><goals><goal>tag</goal><!--tag命令,相当于docker的tag命令--></goals><configuration><image>${project.artifactId}</image> <!--镜像名--><newName>192.168.170.9:5000/${project.artifactId}:latest</newName> <!--打的标签名--></configuration></execution><execution><id>package-push</id><phase>package</phase><goals><goal>push</goal> <!--相当于docker的push命令--></goals><configuration><imageName>私服 ip:私服端口/${project.artifactId}:latest</imageName> <!--要push的镜像名--></configuration></execution></executions><configuration><imageName>${project.artifactId}:latest</imageName><baseImage>java</baseImage> <!--基于java构建--><entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint><dockerHost>http://your's ip:2375</dockerHost><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><!-- <serverId>docker-hub</serverId>&lt;!&ndash;setting.xml中设置的id&ndash;&gt;--><forceTags>true</forceTags> <!--重复构建相同镜像则覆盖镜像--></configuration></plugin>

解释一下呢,就是在maven的package命令继续绑定一个tag命令和一个push命令.看着比较简单. 就不细说.主要要注意的点就是push命令中的镜像名.前面加上私服ip和私服端口(别问我为什么,踩坑了) 不加上则是推送到docker.io中央仓库.

然后ip+端口后的名称和tag配置的名称保持一致,就可以了.

遗漏

插件也可以使用Dockerfile进行打包.这个也就是借助maven的可以将DockerFile读取进来进行执行.比较简单也就不细说了.

一篇博客,我感觉应该还是已经把整个流程说完了.其他的流程应该也就是照猫画虎.看着很简单,不过对我来说还是踩了不少坑啊.借此记录一番.同时还是要说一声.一定要多看文档.如果我刚开始的时候有仔细的查阅一下文档,可能可以更快更好的实现整个过程.插件在github.可以自己搜索查阅.

希望有说错说叉的地方.有大佬进行指点一下不胜感激.

借用大佬说的话结尾:你知道的东西越多,你不知道的东西就越多

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。