io.fabric8.docker-maven-plugin插件使用

一、说明

本文记录内容主要为了在开发和测试环境快速部署使用,详细内容参考一下原博主文章:
Docker 守护进程+远程连接+安全访问+启动冲突解决办法 (完整收藏版)最强大的Docker插件 fabric8io/docker-maven-plugin

二、环境、软件情况

总共有三台服务器,一台window系统,两台linux系统,三台服务器网络互通。

  • window系统:
    代码开发环境:jdk 8
    docker-maven-plugin:0.37.0
    Maven软件:版本 3.6.3
  • linux系统(192.X.X.132)
    docker软件:version 19.03.12
  • linux系统(140.X.X.158)
    私服Harbor:版本 v2.3.2
    域名:https://harbor.xxx.com

以上环境安装过程忽略,只要记录docker-maven-plugin配制与使用。

三、pom.xml文件

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.37.0</version>
    <configuration>
        <!-- docker主机地址 -->
        <dockerHost>tcp://192.X.X.132:2375</dockerHost>

        <!-- 私服Harbor地址,全局配置,如果需要推送到不同地址,可在image标签下配置
               一定不要加https,否则image.name的配置会找不到这个地址 -->
        <!--<registry>harbor.xxx.com</registry>-->

        <!-- 私服Harbor的用户名密码,此处我是配置到了maven的setting文件中 -->
        <authConfig>
            <username>${harbor.username}</username>
            <password>${harbor.password}</password>
        </authConfig>
        <!-- 镜像相关信息,用于拉取和推送到指定中央仓库 -->
        <images>
            <image>
                <!-- 镜像名称,格式为:命名空间/仓库名称:镜像版本号
                         如果registry地址以https开头,则格式为:私服地址/命名空间/仓库名称:镜像版本号-->
                <name>namespace/${project.build.finalName}:${v}</name>
                <!-- 私服Harbor地址 -->
                <registry>harbor.xxx.com</registry>
                <build>
                    <!-- dockerfile地址,此插件也支持docker-compose配置 -->
                    <dockerFile>${project.basedir}/Dockerfile</dockerFile>
                </build>
            </image>
        </images>
        <buildArgs>
            <!-- dockerfile参数,指定jar路径 -->
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>

说明:

  • ${project.build.finalName}:project.build.finalName为在build标签下自定义属性finalName
  • ${v}:v是在输入mvn命令时,动态传递的版本号参数
  • 此插件可能需要commons-codec依赖

四、192.X.X.132服务器配置

1.docker开通2375端口

  1. 打开docker.service配置文件
vi /usr/lib/systemd/system/docker.service
  1. 修改配置文件
#原配置
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
#新配置
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
  1. 重新加载配置文件并重启服务
systemctl daemon-reload
systemctl restart docker
  1. 检查端口是否开启
[root@root ~]# netstat -ntpl | grep 2375
tcp6       0      0 :::2375                 :::*                    LISTEN      3444/dockerd

2. maven push报错:x509: certificate signed by unknown authority

注意:以下方法不建议在不安全网络环境使用

因为私有仓库是https开头,所以需要证书,docker检测不到证书所以会报x509错误,修改方法为让docker信任私有仓库地址,配置方法有两种。

  • 修改docker.service配置文件
    在ExecStart属性增加参数:–insecure-registry https://harbor.xxx.com
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
          --insecure-registry https://harbor.xxx.com
  • 修改daemon.json配置文件
    新增参数:“insecure-registries” : [“192.168.59.100:5000”]
{
  "insecure-registries" : ["harbor.xxx.com"]
}

以上方式不能同时使用,否则会报错。修改后需要重启docker。如果采用修改docker.service配置文件方式,还需要重新加载配置文件

3.服务器修改hosts文件

  1. 打开hosts文件
vi /etc/hosts
  1. 增加域名与ip映射
140.X.X.158 harbor.xxx.com

五、常用命令

先进入项目根目录,然后执行一下命令

mvn clean package
mvn docker:bulid
mvn docker:push -Dmaven.test.skip=true -Dv=1 -f pom.xml

说明:-Dv=1参数,用于pom.xml文件中的${v}使用