前言:
可能有时候为了方便直接使用idea构建项目镜像到docker服务器上,大大方便部署时间,提供工作效率。
开始之前有版本之分,docker-maven-plugin和dockerfile-maven-plugin,前者属于淘汰的,目前推荐后者dockerfile-maven-plugin,下面也是从前者到后者一一实现开始。
第一种:
idea安装docker插件
通过idea的setting中plugins搜索docker进行安装即可
我这块已经安装过了,就不在截图了,安装完成重启idea即可。
idea配置docker的服务器
1、在docker的服务器上进行配置
[root@microservice ~]# vim /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/dockerd-current 后面加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重新加载配置文件和重新启动docker服务:
systemctl daemon-reload
systemctl restart docker
2、对idea进行配置docker
这块选择tcp进行连接,tcp://192.168.0.233:2375 提示连接成功就可以使用了
项目的pom文件配置
1、项目pom.xml配置
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--使用docker-maven-plugin插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>my-hub</serverId>
<!-- 指定 Dockerfile 路径-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<registryUrl>http://${docker.repostory}</registryUrl>
<!--Building image 192.168.10.11/demo1-->
<imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:latest</imageName>
<!--必须配置dockerHost标签(除非配置系统环境变量DOCKER_HOST)-->
<dockerHost>http://${docker.repostory}:2375</dockerHost>
<rm>true</rm>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 是否有push的功能 true代表有 -->
<pushImage>true</pushImage>
<!-- push后是否覆盖已存在的标签镜像 -->
<forceTags>true</forceTags>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路径 此处配置的 即对应 target 目录-->
<directory>${project.build.directory}</directory>
<!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
2、maven的setting.xml配置
servers标签
注意这块的id名称my-hub 必须和 pom文件中的serverId一致
<server>
<id>my-hub</id>
<username>admin</username>
<password>Harbor12345</password>
<configuration>
<email>docker@163.com</email>
</configuration>
</server>
pluginGroups
<pluginGroup>com.spotify</pluginGroup>
执行
通过先clean,然后在package即可或 mvn clean package -U -DskipTests=true
docker镜像仓库
harbor私有仓库
成功
其实一般情况都是直接推送到docker私有仓库中的
第二种:
前期准备:
环境变量配置 DOCKER_HOST=tcp://192.168.0.233:2375 如何不识别就重启电脑
docker服务器开启tcp 2375端口aip服务
[root@microservice ~]# vim /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/dockerd-current 后面加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
1、项目pom.xml中进行配置
<properties>
<!-- docker镜像的前缀 -->
<docker.image.prefix>jhsz</docker.image.prefix>
<!-- docker私服地址,Harbor配置完默认地址就是80,默认不带端口号。但是我这里是81 -->
<docker.repostory>harbor.centos123.com</docker.repostory>
<!--项目名,需要和Harbor中的项目名称保持一致 -->
<docker.registry.name>library</docker.registry.name>
</properties>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--使用docker-maven-plugin插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.10</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>default</id>
<!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<contextDirectory>${project.basedir}</contextDirectory>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<repository>${docker.repostory}/${docker.registry.name}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
总结:docker私服地址 harbor.centos123.com 这块是注册数字证书的时候就是这个域名,使用ip也是可以,但是harbor注册数字证书是ip注册即可。
2、maven中的setting.xml
servers标签
<server>
<id>harbor.centos123.com</id>
<username>admin</username>
<password>Harbor12345</password>
<configuration>
<email>docker@163.com</email>
</configuration>
</server>
pluginGroups标签
<pluginGroup>com.spotify</pluginGroup>
mvn clean package dockerfile:build dockerfile:push
或 手动
日志内容:
[INFO] Building jar: H:\xxx\xxx\geometry-rest\target\xxx-docker-info.jar
[INFO] Successfully built harbor.centos123.com/library/xxx:latest
[INFO]
[INFO] --- dockerfile-maven-plugin:1.4.10:push (default) @ geometry-rest ---
[INFO] The push refers to repository [harbor.centos123.com/library/geometry-rest]
[INFO] Image 7a6b3fe588e4: Preparing
[INFO] Image 2a578a810f21: Preparing
[INFO] Image ddd76074ad4a: Preparing
[INFO] Image 35c20f26d188: Preparing
[INFO] Image c3fe59dd9556: Preparing
[INFO] Image 6ed1a81ba5b6: Preparing
[INFO] Image a3483ce177ce: Preparing
[INFO] Image ce6c8756685b: Preparing
[INFO] Image 30339f20ced0: Preparing
[INFO] Image 0eb22bfb707d: Preparing
[INFO] Image a2ae92ffcd29: Preparing
[INFO] Image a3483ce177ce: Waiting
[INFO] Image ce6c8756685b: Waiting
[INFO] Image 30339f20ced0: Waiting
[INFO] Image 0eb22bfb707d: Waiting
[INFO] Image a2ae92ffcd29: Waiting
[INFO] Image 6ed1a81ba5b6: Waiting
[INFO] Image 7a6b3fe588e4: Pushing
[INFO] Image ddd76074ad4a: Pushing
[INFO] Image 35c20f26d188: Pushing
[INFO] Image 2a578a810f21: Pushing
[INFO] Image c3fe59dd9556: Pushing
[INFO] Image 7a6b3fe588e4: Pushed
[INFO] Image ddd76074ad4a: Pushed
[INFO] Image 6ed1a81ba5b6: Pushing
[INFO] Image 35c20f26d188: Pushed
[INFO] Image a3483ce177ce: Pushing
[INFO] Image ce6c8756685b: Pushing
[INFO] Image 6ed1a81ba5b6: Pushed
[INFO] Image a3483ce177ce: Pushed
[INFO] Image 30339f20ced0: Pushing
[INFO] Image 0eb22bfb707d: Pushing
[INFO] Image ce6c8756685b: Pushed
[INFO] Image a2ae92ffcd29: Pushing
[INFO] Image 0eb22bfb707d: Pushed
[INFO] Image 30339f20ced0: Pushed
[INFO] Image a2ae92ffcd29: Pushed
[INFO] Image 2a578a810f21: Pushed
[INFO] Image c3fe59dd9556: Pushed
[INFO] latest: digest: sha256:60cbce502c48ee0adb0be9692aa38b907e0d1fc7b778a6dfa163fa406b68e08a size: 2628
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
这块提前创建好项目目录,不然会找不到项目名称,我这块是library
总结:不管是第一种还是二种,基本上配置差不多,根据自己习惯使用即可,唯一区别就是第二种必须必须设置maven的 useMavenSettingsForAuth为true,第一种不需要进行配置。
参考:
https://www.cnblogs.com/fangts/p/10299431.html
https://blog.csdn.net/fyk844645164/article/details/107878063?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
https://blog.csdn.net/nickDaDa/article/details/87698396