使用Maven插件fabric8io/docker-maven-plugin实现业务Docker一键部署

LonelyMan 1349 2023-03-14

前言

业务代码提交后需要打包Docker镜像的步骤比较繁琐,需要在运行Docker的Linux机器上拉去最新的代码,运行docker build打包镜像、docker tag对镜像打标签再docker push推送到镜像仓库,虽然可以使用IDEA IDE中的docker插件简化部署流程,但还是比较麻烦

一个名叫fabric8io/docker-maven-plugin的Maven插件能简化这一系列操作,只需要运行maven docker:build docker:push即可完成整个操作

步骤

前提

需已编写好Dockerfile并存放在与pom.xml同级的位置

配置

Maven

在最外层的pom.xml文件的<plugins>中加入该插件,代码如下

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.37.0</version>
    <configuration>
        <dockerHost>tcp://10.0.0.10:2375</dockerHost>
        <registry>${registry.host}</registry>
        <authConfig>
            <username>${registry.username}</username>
            <password>${registry.password}</password>
        </authConfig>
        <images>
            <image>
                <name>${registry.namespace}/${project.build.finalName}:${buildVersion}</name>
                <registry>${registry.host}</registry>
                <build>
                    <dockerFile>${project.basedir}/Dockerfile</dockerFile>
                </build>
            </image>
        </images>
    </configuration>
</plugin>

  • <dockerHost>:表示运行docker相关操作的机器,不填默认为本机

  • <authConfig>:配置镜像仓库的账号密码

  • <registry>:配置全局镜像仓库地址,若<images><image>指定了该配置则按<image>的配置生效

  • <images>:定义镜像相关信息,用于拉取和推送到指定仓库

    • <name>:镜像名
    • <registry>:镜像仓库地址,若配置该项则该配置优先于全局镜像仓库地址配置
    • <build>:执行docker:build时所对应的配置
      • <dockerFile>:指定Dockerfile位置,让插件以Dockerfile模式运行

${xxx}为属性值,若未配置可以在执行mvn命令式添加-Dxxx=xxx

Docker

开通Docker对主机2375端口的监听

编辑docker.service

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

更改配置

#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

重启服务

systemctl daemon-reload
systemctl restart docker

运行

切换到需打包的模块的目录,执行以下代码

mvm clean package -Dmaven.test.skip=true #编译Jar包
mvn docker:bulid #打包成镜像
mvn docker:push -DbuildVersion=1 #指定镜像版本并完成镜像推送

参考

io.fabric8.docker-maven-plugin插件使用_瞳孔里的阳光的博客-CSDN博客

fabric8io/docker-maven-plugin