Spring Boot配置docker-maven-plugin实现构建与推送镜像

一、背景

1、优化前:

目前构建docker镜像都是先执行mvn clean package打包之后,将target目录下的jar包放到服务器上,再通过Dockerfile去build成镜像,步骤多,而且每次都需要登录服务器进行操作,十分麻烦。

2、优化后:

在Spring Boot项目中引入docker-maven-plugin进行相关配置,之后就可以在项目根目录下执行mvn clean package docker:build -DpushImage,就可以在服务器上的docker生成镜像,并且推送到远程仓库上,十分方便,不用每次都登录服务器进行操作。

在进行项目引入docker-maven-plugin之前,先进行docker的配置,使我们能够通过2375端口访问到docker。

二、配置docker,开放2375端口

Docker的2375端口是默认关闭的,如果我们要使用到它,就需要进行以下的配置:

1、安装有docker的服务器,修改docker.service文件:

vi /etc/systemd/system/docker.service

具体文件所在地,得看你安装docker的位置,如果不知道自己安装在哪里了,执行以下指令去查找:

sudo find / -name docker.service

2、修改docker.service

找到文件以下内容:

ExecStart=/usr/bin/dockerd

修改为:

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

3、重启docker服务

systemctl daemon-reload
systemctl restart docker

4、查看端口是否开启

netstat -anp | grep 2375

如果没有被占用,就什么都不显示

5、如果通过以上配置,发现2375没有开启的话,那么请尝试修改daemon.json文件:

vi /etc/docker/daemon.json

具体文件所在地,得看你安装docker的位置,如果不知道自己安装在哪里了,执行以下指令去查找:

sudo find / -name daemon.json

在配置文件添加上hosts项:

{
  "insecure-registries":["xx.xx.xx.xx:5000"],
  "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}

通过以上操作,基本可以打开2375端口,并且可以通过该端口连接上docker,如果还是不行,那么请通过网络查找原因及解决方法了哈。

注意:以上开发的2375端口访问docker的方式是不安全的,如果想要安全的访问,请自行百度了解。

三、搭建docker registry,镜像推送的仓库

一般我们的镜像除了放在docker上,还可以将其推送到docker registry上,其他服务器上的docker就可以在该docker registry上拉取镜像。

关于docker registry的安装及配置,请参考我的另外一篇博客,这里就不重复去写了:

https://blog.csdn.net/Staba/article/details/124550444?spm=1001.2014.3001.5502

四、项目配置docker-maven-plugin

  1. 在父工程pom.xml配置如下,如果你不愿意将插件在父工程的pom.xml中进行管理与配置,那么就将以下配置去掉pluginManagemt标签,然后放在子工程中的pom.xml中即可




    
        
        dev
        
            true
        
        
            ${project.version}
            dev
            http://开发环境服务器ip:2375
            开发环境docker registry服务器ip:5000
        
    
    
        test
        
            ${project.version}
            test
            http://测试环境服务器ip:2375
            测试环境docker registry服务器ip:5000
        
    
    
        prod
        
            ${project.version}
            prod
            http://生产环境服务器ip:2375
            生产环境docker registry服务器ip:5000
        
    



    
        

            
            
                org.springframework.boot
                spring-boot-maven-plugin
                ${spring-boot.version}
            
    
            
                com.spotify
                docker-maven-plugin
                1.2.2
                
                
                
                    
                    
                    ${docker.host}
    
                    
                    
                    
                    
                    
                    
    
                    
                    ${docker.registry}/${project.artifactId}:${imageVersion}-${tag.suffix}
    
                    
                    ${project.basedir}/src/main/docker
    
                    
                    
                        
                            /
                            ${project.build.directory}
                            ${project.build.finalName}.jar
                        
                    
                    
    
    
                    
                    
                    
                    
                    ${docker.registry}
                    
                    3
                    
                    2000
                    
                    
                    
                
            
        
    

如果指定了xxx,那么请在maven的setting.xml中配置以下信息:


      xxx
      your username
      your password
      
        you email
      

2、子工程引入插件,因为docker相关配置都在父工程中写好了,子工程中无须重复写,只需引入插件


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        

        
            com.spotify
            docker-maven-plugin
        
    

3、在标签中指定的路径下创建Dockerfile文件,内容如下:

FROM java
VOLUME /tmp
ENV LANG C.UTF-8 
COPY *.jar app.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
RUN echo "Asia/Shanghai" > /etc/timezone 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Djava.util.Arrays.useLegacyMergeSort=true", "-jar","app.jar"]

4、在子项目根路径上执行mvn clean package -P dev -DimageVersion='1.0.9' docker:build –DpushImage指令,即可将target目录下的jar包构建成镜像,并且推送到docker registry上。

参数解析:

-P dev -> 由于我们在Profile标签中指定了不同环境中使用不同服务器上的docker,所有由该参数指定我们哪个环境的配置生效,默认是dev生效(配置了)。
-DimageVersion='1.0.9' -> 在配置中我们这个属性默认值是当前项目版本,通过该参数指定我们打包镜像的tag最终版本,因为懒的每次去改pom中的version标签,于是自定义一个属性,通过命令行传入版本
docker:build -> 打包完jar之后就会指定docker build指令,将jar包构建成镜像
–DpushImage –> 构建完镜像之后就会将镜像推送到docker registry仓库上
-DpushImageTag -> 如果在中指定了tag,且在中没有:tag信息,使用pushImageTag去推送标签指定的tags镜像

当然,如果你懒的去敲docker相关的指令,可以与maven插件的各执行周期绑定,那么就请在executions中进行绑定配置。

通过执行以上的指令,就可以在控制台上看到镜像build的过程以及推送的过程。

你可能感兴趣的:(spring,docker,spring,maven,spring,boot)