技术解析

分享一个 Spring Boot 工程打 Docker 镜像非常方便的 pom,你也 Docker 的距离就差一个好用的生成镜像的工具,求大佬点评改进!
0
2021-06-01 14:34:25
idczone
  1. spring-boot-maven-plugin自带的生成镜像功能超级慢。因为他要访问 Github 里面的东西,自己的电脑还好,CI 就扛不住了,在墙内的同事也扛不住了,而且那套逻辑也比较复杂灵活,不好掰出来里面的东西,这个一票否决。

  2. 使用这种方式不需要每个工程一个Dockerfile,比如你想给所有项目的 Dockerfile 修改一些配置,此处修改一次,所有工程通吃。

  3. 这个一个 pom 工程,deploy 到私服上之后,下面的 Spring Boot 工程可以使用此 pom 作为 parent 代替 spring-boot-starter-parent 。如果你们已经有自定义的通用 pom,这个也可以被轻松整合进去。

  4. 利用了 Spring boot 2.3 引入的分层构建,每次重新构建镜像会复用上面的层,导致上传一次镜像到远程仓库之后,后面上传镜像都很快,从本来的要上传几十上百 M 缩减到现在的几 M 甚至 1M 不到(这个根据自己的工程体量)。Spring Boot 2.3 以下不可使用

  5. 保持清爽,不堆重复配置,按照约定大于配置原则,不像某些工程,一个 pom 光都几百行,其实大部分内容都是从网上上拷的,起不到作用。这个 pom 指定了很少的只是必须的内容,你可以轻轻松松的把其揉进已存的 pom 里面去。

  6. 按照的 activation 机制自动识别 Spring Boot 工程,非 SpringBoot 工程也能正常把其作为 parent,而且会自动屏蔽掉镜像构建。



    4.0.0
    com.example
    spring-boot-docker-parent
    0.0.1-SNAPSHOT
    pom

    
        
        11
        UTF-8
        2.4.5
    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${version.spring-boot}
                pom
                import
            
            
            
                org.apache.commons
                commons-collections4
                4.4
            
            
                commons-io
                commons-io
                2.8.0
            
            
                com.google.guava
                guava
                30.1.1-jre
            
            
                com.google.code.findbugs
                annotations
                3.0.1u2
                provided
            
            
                org.jetbrains
                annotations
                20.1.0
                provided
            
            
                org.mapstruct
                mapstruct
                ${version.mapstruct}
            
            
                org.mapstruct
                mapstruct-processor
                ${version.mapstruct}
            
        
    

    
 抗投诉服务器       
            
                maven-source-plugin
                3.2.1
                
                    
                        attach-sources
                        
                            jar
                        
                    
                
            
        
        
            
                
                
                    maven-compiler-plugin
                    3.8.1
                
            
        
    

    
    

    
        
            spring-boot-package
            
                
                    
                    ${basedir}/src/main/resources/config/application.properties
                
            
            
                
                    
                        org.codehaus.gmaven
                        groovy-maven-plugin
                        2.1.1
                        
                            
                                copy-Dockerfile
                                package
                                
                                    execute
                                
                            
                        
                        
                            

                            
                        
                    
                    
                        org.springframework.boot
                        spring-boot-maven-plugin
                        ${version.spring-boot}
                        
                            
                                spring-boot-package
                                package
                                
                                    repackage
                                
                                
                                    ${start-class}
                                    ${project.build.directory}/docker-build/
                                
                            
                        
                    
                    
                        io.fabric8
                        docker-maven-plugin
                        0.34.1
                        
                            
                                docker-build-push
                                package
                                
                                    build
                                    push
                                
                            
                        
                        
                            
                                
                                    

                                    
                                    your.registry.domain/${dockerImageGroupAndName}
                                    
                                        ${project.build.directory}/docker-build/
                                        
                                            ${project.version}
                                        
                                        
                                            ${project.build.finalName}.jar
                                        
                                    
                                
                            
                        
                    
                
            
        
    

    
    
        
            xxx-release-deploy
            https://XXX/repository/maven-releases/
        
        
            xxx-snapshot-deploy
            https://XXX/repository/maven-snapshots/
        
    


为啥不用 jib ?

不知道啊,刚刚听说,所以标题上写的“请大佬点评改进”。我来看看,也许能直接把我这钻木取火的方式给毙掉

同 1 楼, 推荐 google 的 jib

白嫖 Travis CI

jib 了解一下

同推荐 jib

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服