美文网首页
Gradle项目构建docker镜像(支持Gradle多模块)

Gradle项目构建docker镜像(支持Gradle多模块)

作者: 天冷请穿衣 | 来源:发表于2021-03-17 11:17 被阅读0次

    通过在Gradle项目中集成gradle-docker插件,可实现gradle项目直接打包生成docker镜像。

    一、集成gradle-docker插件,需要调整两个地方:

    1、项目根目录下加入Dockerfile文件,以下为Dockerfile文件示例(注意:DockerFile文件默认放在项目根目录下):

    FROM java:8-jdk
    MAINTAINER tiancheng "tiancheng.yang@tcl.com"
    #使用传递变量的方式,可以不用写死jar的名称
    ARG JAR_FILE
    COPY ./${JAR_FILE} service.jar
    
    RUN useradd -m demo && mkdir -p /home/demo/volume/log \
            && chown -R demo:demo /home/demo/volume/  service.jar  \
            && /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
            && echo 'Asia/Shanghai' >/etc/timezone
    USER tclai
    ENTRYPOINT ["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -Xloggc:/home/demo/volume/log/gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy -Dspring.profiles.active=dev -jar service.jar"]
    EXPOSE 8062
    

    2、修改build.gradle配置文件。以下为基于springboot的gradle项目配置文件示例,需要改动的只是docker相关的部分:

    buildscript {
           ext {
                  springBootVersion = '2.3.5.RELEASE'
           }
    
           repositories {
            maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
            mavenCentral()
           }
    
           dependencies {
                classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
                classpath('gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.19.2')
           }
    }
    
    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'application' 
    apply plugin: 'com.palantir.docker'
    version = '1.0'
    sourceCompatibility = '1.8'
    targetCompatibility = 1.8
    mainClassName = "com.example.demo.Application"
    repositories {
           mavenCentral()
    }
    
    dependencies {
           compile('org.springframework.boot:spring-boot-starter-web')
           testCompile('org.springframework.boot:spring-boot-starter-test')
    }
    
    docker {
         dockerfile file('Dockerfile') //DockerFile路径
         name "${project.group}/${project.getProperties().get('docker.repo')}:${project.getProperties().get('docker.tag')}"
         files jar.archivePath
         buildArgs(['JAR_FILE': "${jar.archiveName}"])
    }
    

    二、以上配置修改完成后,可通过以下命令编译并生成docker镜像

    gradle clean build -x test docker --info -Pdocker.repo=test -Pdocker.tag=1.0

    注意:1.-Pdocker.repo 和 -Pdocker.tag,用于指定生成的镜像REPOSITORY和TAG信息
    2.当前环境需要安装gradle插件和docker容器,否则命令无法正常执行
    若项目是gradle多模块项目,修改子项目的build.gradle,在父级项目下运行:gradle clean build -x test :subproject:docker --info -Pdocker.repo=test -Pdocker.tag=1.0 )

    相关文章

      网友评论

          本文标题:Gradle项目构建docker镜像(支持Gradle多模块)

          本文链接:https://www.haomeiwen.com/subject/olxjcltx.html