通過在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 )