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

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

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

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

FROM java:8-jdk
MAINTAINER tiancheng "[email protected]"
#使用传递变量的方式,可以不用写死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多模块))