通过在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 )
网友评论