idea使用dockermavenplugin插件将项目编译为docker镜像到远程linux服务器

编程

1、先配置docker-maven-plugin插件

在pom文件中加入docker-maven-plugin插件相关配置

绑定docker命令到maven各阶段

这里需要服务器开启2375端口,后面详细描述

具体代码:

 

  1.  

    <!--docker 插件-->

  2.  

    <docker.repostory>hub.*****.com</docker.repostory>

  3.  

    <docker.registry.name>****</docker.registry.name>

 

  1.  

    <plugin>

  2.  

    <groupId>com.spotify</groupId>

  3.  

    <artifactId>docker-maven-plugin</artifactId>

  4.  

    <version>0.4.14</version>

  5.  

    <configuration>

  6.  

    <serverId>my-hub</serverId>

  7.  

    <registryUrl>http://${docker.repostory}</registryUrl>

  8.  

    <!--<pushImage>true</pushImage>-->

  9.  

    <imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}</imageName>

  10.  

    <imageTags>

  11.  

    <imageTag>${project.version}</imageTag>

  12.  

    <imageTag>latest</imageTag>

  13.  

    </imageTags>

  14.  

    <dockerHost>http://192.168.*.*:2375</dockerHost>

  15.  

    <baseImage>daocloud.io/library/java:openjdk-8u40</baseImage>

  16.  

    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>

  17.  

    <exposes>

  18.  

    <expose>8080</expose>

  19.  

    </exposes>

  20.  

    <resources>

  21.  

    <resource>

  22.  

    <targetPath>/</targetPath>

  23.  

    <directory>${project.build.directory}</directory>

  24.  

    <include>${project.build.finalName}.jar</include>

  25.  

    </resource>

  26.  

    </resources>

  27.  

    </configuration>

  28.  

    <!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->

  29.  

    </plugin>

  30.  

    </plugins>

2、配置docker-wagon-plugin插件(非本次方式必须,可以安装,是另外一种部署方式,直接通过wagon命令,直接把jar包推到服务器,然后替换)

具体代码:

 

  1.  

    <!--wagon plugin 配置-->

  2.  

    <service-path>/work/${project.artifactId}</service-path>

  3.  

    <pack-name>${project.artifactId}.jar</pack-name>

  4.  

    <remote-addr>192.168.*.*:*</remote-addr>

  5.  

    <remote-username>root</remote-username>

  6.  

    <remote-passwd>****</remote-passwd>

 

  1.  

    <extensions>

  2.  

    <extension>

  3.  

    <groupId>org.apache.maven.wagon</groupId>

  4.  

    <artifactId>wagon-ssh</artifactId>

  5.  

    <version>2.8</version>

  6.  

    </extension>

  7.  

    </extensions>

 

  1.  

    <plugin>

  2.  

    <groupId>org.codehaus.mojo</groupId>

  3.  

    <artifactId>wagon-maven-plugin</artifactId>

  4.  

    <version>1.0</version>

  5.  

    <configuration>

  6.  

    <fromFile>target/${pack-name}</fromFile>

  7.  

    <url><![CDATA[scp://${remote-username}:${remote-passwd}@${remote-addr}${service-path}]]></url>

  8.  

    <commands>

  9.  

    <!-- Kill Old Process -->

  10.  

    <command>kill -9 `ps -ef |grep ${project.artifactId}.jar|grep -v "grep" |awk "{print $2}"`</command>

  11.  

    <!-- Restart jar package,write result into renren.log -->

  12.  

    <command><![CDATA[nohup java -jar ${service-path}/${pack-name} --spring.profiles.active=test > ${service-path}/renren.log 2>&1 & ]]></command>

  13.  

    <command><![CDATA[netstat -nptl]]></command>

  14.  

    <command><![CDATA[ps -ef | grep java | grep -v grep]]></command>

  15.  

    </commands>

  16.  

    <!-- 运行命令 mvn clean package wagon:upload-single wagon:sshexec-->

  17.  

    <displayCommandOutputs>true</displayCommandOutputs>

  18.  

    </configuration>

  19.  

    </plugin>

3、完了后,可以在maven-project看到docker插件和wagon插件

4、需要在上面配置的Linux服务器,通过docker开启2375端口,提供外部访问docker

编辑docker文件:/usr/lib/systemd/system/docker.service

vim /usr/lib/systemd/system/docker.service

修改ExecStart行为下面内容

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

重新加载docker配置

 

  1.  

    systemctl daemon-reload // 1,加载docker守护线程

  2.  

    systemctl restart docker // 2,重启docker

5、关闭防火墙

ss -luntp

systemctl status firewalld

 

  1.  

    systemctl stop firewalld

  2.  

    systemctl disable firewalld

如果开放成功,访问2375端口,会看到如下效果:

6、安全认证配置

当我们 push 镜像到 Docker 仓库中时,不管是共有还是私有,经常会需要安全认证,登录完成之后才可以进行操作。当然,我们可以通过命令行

docker login -u user_name -p password docker_registry_host 

登录,但是对于自动化流程来说,就不是很方便了。使用 docker-maven-plugin 插件我们可以很容易实现安全认证。
首先在 Maven 的配置文件 setting.xml 中增加相关 server 配置,主要配置 Docker registry用户认证信息。

路径:

 

  1.  

    <servers>

  2.  

    <server>

  3.  

    <id>my-hub</id>

  4.  

    <username>**</username>

  5.  

    <password>***</password>

  6.  

    <configuration>

  7.  

    <email>***@163.com</email>

  8.  

    </configuration>

  9.  

    </server>

 

7、测试、验证

先配置镜像images版本c-0311

执行完第一步,控制台看到日志,正在构建、打包jar

接下来,执行第二步,镜像生成完成,且推到了内网了

接下来,去内网看下c-0311版本的镜像已存在,则测试成功了!

 

8、相关报错,以及解决办法:

问题1:

docker pull 的时候报错 Get https://hub.xxx.com/v1/_ping: dial tcp 192.168.1.8:443: getsockopt: connection refused

 

  1.  

    内网搭建自己的docker 仓库时遇到这个问题,原因是docker 默认不支持http的registry ,

  2.  

    vim /etc/docker/daemon.json 添加 { "insecure-registries":["hub.***.com"] }

  3.  

     

  4.  

    hub.***.com 这是私有docker仓库域名,与前面配置匹配

  5.  

     

  6.  

    重启 docker

  7.  

    systemctl restart docker.service

问题2:

 

  1.  

    #内网连不上harbor线上仓库

  2.  

    [root@localhost ~]# docker login hub.***.com

  3.  

    Username: user1

  4.  

    Password:

  5.  

    Error response from daemon: Get http://hub.***.com/v1/users/: dial tcp: lookup hub.***.com on 222.86.101.63:53: no such host

  6.  

    #甚至连ping都不通时

  7.  

    [root@localhost ~]# ping hub.***.com

  8.  

    ping: hub.***.com: 未知的名称或服务

  9.  

     

  10.  

     

  11.  

    #解决办法,配置hosts

  12.  

    [root@localhost ~]# vi /etc/hosts

 

9、搭建docker私有镜像仓库Harhor

具体操作详见另外一篇博客:Centos7安装Docker镜像仓库Harbor1.5.3

在域名的服务器上搭建了镜像仓库Harbor后,需要确保以下几个地方都正确:

a、在https://hub.***.com,注册普通账号,然后新建普通账号的项目,用以保存镜像

b、把注册好的harbor账号密码,配置在maven的setting.xml上

c、在idea的pom设定推送的地址为 hub.***.com,与前面配置好的Harbor地址一致

把 docker-maven-plugin 下的  pushImage标签的注释放开

<pushImage>true</pushImage>

需要确保  ${docker.repostory}  的指与线上hub仓库地址一致了

d、需要保证内网以及开发的windows环境能访问的通线上的镜像仓库地址,配置hosts文件

这里贴一个,如果碰上没有权限修改hosts文件的解决办法:

 

都OK后,会发现  docker:build 命令,控制台会推送成功,也可到线上仓库去检查

 

线上环境直接  docker pull 拉去该镜像即可

 

以上是 idea使用dockermavenplugin插件将项目编译为docker镜像到远程linux服务器 的全部内容, 来源链接: utcz.com/z/514114.html

回到顶部