三种自动化构建Docker镜像的Maven插件使用

手动部署SpringBoot应用比较繁琐,且容易出错,合理使用相关插件能提高工作效率,降低出错概率。本文主要介绍三种自动化构建Docker镜像的Maven插件使用,开发工具使用idea。

  1. io.fabric8.docker-maven-plugin
  2. com.spotify.dockerfile-maven-plugin
  3. org.springframework.boot.spring-boot-maven-plugin [SpringBoot官方插件]

以下分别介绍这三种插件的使用方法

io.fabric8.docker-maven-plugin

  • 添加插件依赖包在pom.xml添加以下代码,当前最新的版本为0.37.0

    
        
            io.fabric8
            docker-maven-plugin
            0.37.0
        
    

添加后在idea 右侧工具栏可以看到相关的插件命令


docker-maven-plugin
  • 添加生成docker镜像的配置项,在以上plugin节点下添加即可

    
    http://12.78.18.15:5000
    
        
            
            12.78.18.15:5000/${project.name}:${project.version}
            
            
                ${project.basedir}
            
            
            
                
                ${project.artifactId}
                
                
                    8082:8082
                
                
                
                    mysql:db
                
                
                
                    
                        /etc/localtime:/etc/localtime
                    
                
            
        
    

私有镜像仓库搭建可参考:https://www.jianshu.com/p/bbbf93b29b78
dockerfile相关的配置这里使用Dockerfile文件

  • Dockerfile内容
# 该镜像需要依赖的基础镜像
FROM lpicanco/java11-alpine
# 将当前maven目录生成的文件复制到docker容器的/目录下
COPY target/fabric-docker-1.0-SNAPSHOT.jar /
# 声明服务运行在8082端口
EXPOSE 8082
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/fabric-docker-1.0-SNAPSHOT.jar"]
# 指定维护者的名字
MAINTAINER climber
  • 插件使用
  1. 生成镜像
    生成镜像前要先将项目打包,否则会找不到jar文件而报错
    双击"docker:builder" 即可完成镜像的生成


    docker:builder button
docker:builder
  1. 推送镜像到私有仓库
    在上传前请再先登录私有仓库
docker login --username=lipandeng 12.7.18.150:5000

然后双击"docker:push"即可


Docker Registry UI
  1. 容器操作
    容器中有关联mysql容器,所以先启动mysql容器,然后双击“docker:start/stop/remove”来实现容器的启动/停止/销毁操作


  2. 其它
    也可在生产包的时候同时生成镜像文件,添加如下配置

    
        build-image
        package
        
            build
        
    

这样就不用单独再双击“docker:build”了,在双击package,生成包成功后接着就生成了新的镜像

com.spotify.dockerfile-maven-plugin

Spotify官方已经不再推荐使用 docker-maven-plugin ;推荐使用 com.spotify.dockerfile-maven-plugin

  • 配置pom.xml
    在pom.xml添加 com.spotify.dockerfile-maven-plugin 插件配置

    
        12.78.18.15:5000
    
    
        
            
                 com.spotify
                 dockerfile-maven-plugin
                 1.4.13
                 
                     
                     
                         default
                         
                             build
                             push
                         
                     
                 
                 
                     ${docker.image.prefix}/spotify-dockerfile
                     ${project.version}
                     
                     true
                     
                     
                         ${project.build.finalName}.jar
                     
                 
             
        
    
    

    idea 右侧栏即可显示相关操作命令


    dockerfile-maven
  • 编写Dockerfile
    这里说明下插件特有的新功能,可使用pom.xml中指定的变量

    # 此处的JAR_FILE正式pom.xml中指定的buildArgs->JAR_FILE
    ARG JAR_FILE
    COPY target/${JAR_FILE} /app.jar
    
  • 构建docker images

    使用该插件构建Docker镜像,需要有一个安装好的Docker运行环境,且需要在运行该插件的机器上定义DOCKER_HOST环境变量,配置访问Docker的URL
    linux 下配置

    export DOCKER_HOST=tcp://localhost:2375
    

    window下配置环境变量,自行配置即可
    接下来,就可以运行maven命令来构建Docker镜像了,使用idea右侧工具栏响应的命令双击即可

    mvn package 或者 mvn dockerfile:build
    
mvn package

mvn package
  • 推送到私有镜像仓库

    作者使用的非docker hub,而是自己搭建的,且需要用户验证,pom.xml配置如下

    true
    

    同时在maven的settings.xml中的servers下增加一个server配置:

     
          
             12.78.182.15:5000
             lipandeng
             123456
           
     
    

    注意server.id即是上边配置的docker.image.prefix
    push 镜像

    mvn dockerfile:push
    

    查看镜像库即可验证上传是否成功


    registry2

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

子项目:springboot-docker
springboot 2.3.X+ , maven plugin支持将应用程序打包成Docker镜像,无需额外的Dockerfile,只需要一条命令即可,不需要任何改动,这里我们用最新版的2.5.3
使用方法:

  • 配置pom.xml
    
        12.78.18.15:5000
    
    
        org.springframework.boot
        spring-boot-maven-plugin
         
            
                
                ${docker.image.prefix}/${project.name}:${project.version}
                
                true
             
            
                
                http://localhost:2375
                
                false
                
                   
                    
                    test
                    
                    123456
                    
                    http://${docker.image.prefix}      
                      
            
         
       
    
  • 生成镜像&推送到私有镜像仓库
    mvn spring-boot:build-image
    

    也可在idea,直接双击SpringBoot插件的build-image命令即可一键打包并推送到镜像仓库
    生成镜像工程中由于需要从github下载文件,大概率会不成功,需要多次尝试。
    最后在本地和私有镜像仓库均有docker镜像,表示buiild-image已经完成。


    build-image1

    build-image2

    build-image3

    build-image4

总结

  1. io.fabric8.docker-maven-plugin 比较灵活(可dockerfile也可pom.xml配置)、支持直接操作容器,且仍在持续更新,推荐使用。
  2. com.spotify.dockerfile-maven-plugin 支持dockerfile 近两年无更新,不支持操作容器。
  3. org.springframework.boot.spring-boot-maven-plugin springboot官方插件,无需额外安装,但需要从github下载相关层文件,失败率高,需要多次尝试。

参考代码:https://github.com/lipandeng/docker-maven-demo

你可能感兴趣的:(三种自动化构建Docker镜像的Maven插件使用)