【springboot】使用gradle生成Spring Boot应用的Docker Image

【springboot】使用gradle生成Spring Boot应用的Docker Image

背景

  • 随着微服务化,使服务越来越多,而部署服务更是一个麻烦的工作,项目部署实现docker趋势,docker 镜像有时我们必须的组件.而把springboot应用生成docker镜像就是此博客需要做的事情.

最终效果

  • 生成的镜像
    在这里插入图片描述
  • 运行容器
    在这里插入图片描述
  • 容器运行后的日志
    在这里插入图片描述
    是不是项目运行的日志,这就证明我们把springboot应用通过docker部署起来了

配置

build.gradle
/**
 * ===================================================================================================================
 * -------------------------------------------       引入项目插件         ----------------------------------------------
 * ===================================================================================================================
 */
buildscript {
    ext {
        springBootVersion = '2.2.6.RELEASE'
    }
    repositories {
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") //springboot-gradle插件
        classpath("se.transmode.gradle:gradle-docker:1.2")          //docker插件
    }
}
plugins {
    id 'org.springframework.boot' version "${springBootVersion}"    //spring提供的spring boot插件,主要用到了其依赖管理的功能.
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'    //spring jar版本管理
    id 'java'                                                       //java插件
    id 'maven-publish'                                              //该插件可以将打包的jar发送到maven库
}

/**
 * ===================================================================================================================
 * -------------------------------------------      所有项目的通用配置     ----------------------------------------------
 * ===================================================================================================================
 */
configure(allprojects) { project ->
    //项目基础属性
    group 'com.emodernhy'           //项目所属组织
    version '1.0-SNAPSHOT'          //项目版本号


    //引入插件
    apply from: "${rootProject.rootDir}/dependency.gradle"          //引入jar包版本配置文件
    apply plugin: 'java'                                            //java插件
    apply plugin: 'maven'                                           //maven插件
    apply plugin: 'idea'                                            //IDEA插件
    apply plugin: 'eclipse'                                         //eclipse插件
    apply plugin: 'org.springframework.boot'                        //spring boot插件
    apply plugin: 'io.spring.dependency-management'                 //实现maven的依赖统一管理功能
    apply plugin: 'application'                                     //docker插件引用
    apply plugin: 'docker'                                          //引入docker插件


    //JDK版本声明
    sourceCompatibility = custom.version.JDK
    targetCompatibility = custom.version.JDK
    //默认启动类
    mainClassName = "com.emodernhy.generator.GeneratorApplication"

    //配置仓库
    repositories {
        mavenLocal()
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
        maven { url 'https://repo.spring.io/libs-snapshot' }
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
        mavenCentral()
        jcenter()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }

    //指定项目编码
    tasks.withType(JavaCompile) {
        options.encoding = "${custom.encoding.OPTIONS}"
    }

    //在多模块下,授权打包依赖模块
    jar {
        enabled = true
    }
    //重打包基础配置
    bootJar {
        launchScript()
        archivesBaseName = "${project.name}"
    }
    //docker配置
    distDocker {
        baseImage "registry.cn-hangzhou.aliyuncs.com/emodernhy/jdk"
        maintainer 'hbsky2015@aliyun.com bo_huang'
    }
}


/**
 * ===================================================================================================================
 * -------------------------------------------      所有所有项目的通用配置     ---------------------------------------------
 * ===================================================================================================================
 */
configure(allprojects) {
    project ->
        dependencyManagement {
            //定义版本
            dependencies {
                /**
                 * lombok
                 */
                dependency "org.projectlombok:lombok:${custom.version.LOMBOK}"
                /**
                 * hutool工具类
                 */
                dependency "cn.hutool:hutool-all:${custom.version.HUTOOL}"
                /**
                 * HikariCP数据库连接池
                 */
                dependency "com.zaxxer:HikariCP:${custom.version.HIKARI_CP}"
                /**
                 * mysql数据库驱动
                 */
                dependency "mysql:mysql-connector-java:${custom.version.MYSQL}"
                /**
                 * commons-lang3
                 */
                dependency "org.apache.commons:commons-lang3:${custom.version.APACHE_COMMON_LANG3}"
                /**
                 * MyBatis-Plus 的代码生成器
                 */
                dependency "com.baomidou:mybatis-plus-generator:${custom.version.MYBATIS_PLUS}"
            }
        }
}

configure(allprojects) {
    project ->
        /**
         * -============================================================================================================
         * -=====================================模块的公共依赖==================================================
         * -============================================================================================================
         */
        dependencies {
            /**
             * -=================================================================================-
             * - ********************       基本相关依赖      *************************** -
             * -=================================================================================-
             */
            //使用lombok来简化掉编码过程中的通用的方法.
            annotationProcessor 'org.projectlombok:lombok'
            compileOnly 'org.projectlombok:lombok'
            testAnnotationProcessor 'org.projectlombok:lombok'
            testCompileOnly 'org.projectlombok:lombok'

            //commons-lang3工具包
            implementation 'org.apache.commons:commons-lang3'
            //工具包
            implementation('cn.hutool:hutool-all')
            /**
             * -=================================================================================-
             * - ********************       springboot相关jar      *************************** -
             * -=================================================================================-
             */
            implementation 'org.springframework.boot:spring-boot-starter'
            //web
            implementation 'org.springframework.boot:spring-boot-starter-web'
            //test
            testImplementation('org.springframework.boot:spring-boot-starter-test') {
                exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
            }
            //apo
            implementation 'org.springframework.boot:spring-boot-starter-aop'
            //yml,properties配置文件有提示
            implementation 'org.springframework.boot:spring-boot-configuration-processor'
            /**
             * -=================================================================================-
             * - ********************       数据库相关jar      *************************** -
             * -=================================================================================-
             */
            //MyBatis-Plus 的代码生成器
            implementation 'com.baomidou:mybatis-plus-generator'
            //velocity模板
            implementation 'org.apache.velocity:velocity-engine-core:2.2'
            //mysql数据库驱动
            implementation 'mysql:mysql-connector-java'
            //连接池
            implementation 'com.zaxxer:HikariCP'
            /**
             * -=================================================================================-
             * - ********************       其他相关jar      *************************** -
             * -=================================================================================-
             */
            //日志性能监控
            implementation 'org.perf4j:perf4j:0.9.16'
        }
}

详解
  • 引入插件
buildscript {
    ext {
        springBootVersion = '2.2.6.RELEASE'
    }
    repositories {
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") //springboot-gradle插件
        classpath("se.transmode.gradle:gradle-docker:1.2")          //docker插件
    }
}

	apply plugin: 'application'                                     //docker插件引用
    apply plugin: 'docker'                                          //引入docker插件

注意:如果添加了application插件的话,默认gradle-docker插件会添加一个distDocker的 gralde task,用来构建一个包含所有程序文件的 docker 镜像

  • 配置main启动类(也就是springboot main启动类全路径)
mainClassName = "com.emodernhy.generator.GeneratorApplication" 
  • docker插件的使用
    • 最简单的配置
	//docker配置
    distDocker {
        baseImage "registry.cn-hangzhou.aliyuncs.com/emodernhy/jdk"
        maintainer 'hbsky2015@aliyun.com bo_huang'
    }

这样的配置,镜像名会使用项目名,镜像版本会使用项目版本,暴露端口就是项目运行端口

    • 详细配置
	//docker配置
    distDocker {
        baseImage "registry.cn-hangzhou.aliyuncs.com/emodernhy/jdk"
        maintainer 'hbsky2015@aliyun.com bo_huang'
        tag "emondernhy_test"
        version 1.1
        setEnvironment("JAVA_OPTS", "-Dspring.profiles.active=test")
    }

这里我修改了镜像名称和镜像版本,也加入的程序运行的环境变量

    • Dockerfiles 包含一些有关image相应的指令要求
Dockerfile关键词gradle-task方法
ADDaddFile(Closure copySpec)
ADDaddFile(String source, String dest)
ADDaddFile(File source, String dest)
CMDdefaultCommand(List cmd)
ENTRYPOINTentryPoint(List entryPoint)
ENVsetEnvironment(String key, String val)
EXPOSEexposePort(Integer port)
EXPOSEexposePort(String port)
RUNrunCommand(String cmd)
USERswitchUser(String userNameOrUid)
VOLUMEvolume(String… paths)
WORKDIRworkingDir(String dir)
    • 如果需要使用 Dockerfile
   //docker配置
    distDocker {
        dockerfile("Dockerfile")
    }

里面放Dockerfile路径

执行

在这里插入图片描述
这里就生成你的镜像了
在这里插入图片描述

镜像内部结构

在这里插入图片描述

  • emodernhy_generator-1.0-SNAPSHOT : springboot应用程序
    • bin springboot运行脚本
    • lib 程序所有的jar
  • output: 我自己配置日志文件目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值