文章目录
- IDEA 使用Gradle构建Spring Boot项目并配置Docker
- 1. 在IDEA中使用Gradle构建Spring Boot项目
- 利用IDEA Gradle插件打包项目
- 2. Gradle配置Docker
- 2.1 IDEA Docker插件配置
- 2.2 com.bmuschko.docker-spring-boot-application
- 2.2.1 使用IDEA配置Docker插件完成项目Docker容器部署
- 2.3 com.palantir.docker
IDEA 使用Gradle构建Spring Boot项目并配置Docker
例程环境说明:
系统:Windows10
IDE:IntelliJ IDEA 2020.3.3 (Ultimate Edition)
Java版本:java11
构建工具:Gradle
1. 在IDEA中使用Gradle构建Spring Boot项目
打开IDEA选择File->New->Project…
选择Spring Initializr,Project-SDK 我们这里选择JDK11
在新建窗口中,依照下图填写相应的内容
项目依赖我们选择Spring Web和Thymeleaf
之后点击Next->Finished 完成项目的创建,项目创建完毕后如下图所示:
初次构建项目有可能会花费较多时间
项目的根目录,我们可以看到build.gradle文件,这个是项目的构建脚本,我们可以更改Maven镜像仓库来提升依赖包的下载速度。把项目的Maven镜像仓库改为国内阿里云的,下面为该项目的gradle配置
// 使用插件
plugins {
id 'org.springframework.boot' version '2.4.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
// 指定了生生成的编译文件的版本,默认为jar包
group = 'com.stackstone.demo'
version = '1.0.0'
// 指定编译.java文件的JDK版本
sourceCompatibility = '11'
// 使用了Maven的中央仓库(可以指定其他仓库)
repositories {
// mavenCentral()
// 阿里云镜像仓库
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}
// 依赖关系
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
// 测试
test {
useJUnitPlatform()
}
新建controller包,编写HelloController.java
package com.stackstone.study.hellodocker.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/")
public String hello(Model model) {
model.addAttribute("hi", "HelloWorld!");
return "hello";
}
}
之后在项目中resources
目录下的templates
新建hello.html
页面内容如下:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<h1 th:text="${hi}"></h1>
</body>
</html>
之后运行项目
控制台打印如下内容表示项目启动成功:
浏览器访问:localhost:8080,会出现如下Hello World页面
利用IDEA Gradle插件打包项目
如下图所示,IDEA的Gradle插件会列举一些gradle命令,我们运行bootJar后,项目中会生成build文件夹,在libs中可以找到我们项目打包的jar包。拷贝出来后java -jar运行该jar包即可启动项目
以上代码例程地址:https://github.com/lt5227/gradle-docker-demo/tree/basic_demo
2. Gradle配置Docker
Gradle管理配置Docker的插件有一些,这里分别介绍两款插件的配置和使用。为了方便集成IDEA的使用,我们先配置IDEA的Docker插件。
2.1 IDEA Docker插件配置
右键下图所示的Docker图标,选择Settings
在General里面勾选Expose daemon on tcp://localhost:2375 without TLS之后应用重启服务
在IDEA中打开Docker设置面板,如下图所示勾选填写相应信息,之后测试配置,如果提示成功则说明配置正确点击OK即可。
2.2 com.bmuschko.docker-spring-boot-application
该插件的GIT地址:https://github.com/bmuschko/gradle-docker-plugin 插件地址:https://plugins.gradle.org/plugin/com.bmuschko.docker-spring-boot-application 根据官方文档的说明,我们将build.gradle
文件更改如下:
// 使用插件
plugins {
id 'org.springframework.boot' version '2.4.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'com.bmuschko.docker-spring-boot-application' version '6.7.0'
}
// 指定了生生成的编译文件的版本,默认为jar包
group = 'com.stackstone.demo'
version = '1.0.0'
// 指定编译.java文件的JDK版本
sourceCompatibility = '11'
// 使用了Maven的中央仓库(可以指定其他仓库)
repositories {
// mavenCentral()
// 阿里云镜像仓库
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}
// 依赖关系
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
docker {
springBootApplication {
// 使用JDK11基础镜像,如果是JDK8 使用:'openjdk:8-alpine'
baseImage = 'adoptopenjdk/openjdk11:ubi'
ports = [8080]
images = ["${project.group}/${bootJar.archiveBaseName.get()}:${bootJar.archiveVersion.get()}"]
jvmArgs = ['-Djava.security.egd=file:/dev/./urandom', '-Xmx2048m']
}
url = 'tcp://127.0.0.1:2375'
}
}
// 测试
test {
useJUnitPlatform()
}
之后在IDEA的Gradle面板重新加载项目,会出现如下所示的Tasks。
我们运行dockerBuildImage,初次构建时间会比较长,我这里大约花费了7分钟多。
构建完毕后,我们就可以在Docker Desktop中看到我们构建的image,如下所示:
启动的话可以在控制台输入命令:
docker run -p 8080:8080 -t com.stackstone.demo/hello:1.0.0
如下所示:
2.2.1 使用IDEA配置Docker插件完成项目Docker容器部署
也可以利用IDEA的docker插件进行配置启动:
选择Edit Configurations...
添加新的配置
选择Docker->Dockerfile
如下图所示填写相应配置信息之后点击OK
配置好后点击运行
之后我们在Services窗口可以看到如下信息:
表示Docker启动成功,在windows的Docker Desktop中也可以看到生成的容器
我们也可以选择Docker->DockerImage,按下图方式填写配置
图中的Image Id可以在如下所示的页面中查询到。
配置完后启动即可~。
以上代码Demo: https://github.com/lt5227/gradle-docker-demo/tree/docker-plugin_1
2.3 com.palantir.docker
该插件的GIT地址:https://github.com/palantir/gradle-docker 插件地址:https://plugins.gradle.org/plugin/com.palantir.docker
首先在项目中手工创建Dockerfile文件,内容如下所示
FROM adoptopenjdk/openjdk11:ubi
VOLUME /tmp
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
修改项目build.gradle
:
// 使用插件
plugins {
id 'org.springframework.boot' version '2.4.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'com.palantir.docker' version '0.26.0'
}
// 指定了生生成的编译文件的版本,默认为jar包
group = 'com.stackstone.demo'
version = '1.0.0'
// 指定编译.java文件的JDK版本
sourceCompatibility = '11'
// 使用了Maven的中央仓库(可以指定其他仓库)
repositories {
// mavenCentral()
// 阿里云镜像仓库
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}
// 依赖关系
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
docker {
name "${project.group}/${bootJar.archiveBaseName.get()}"
files bootJar.archiveFile.get().asFile
buildArgs(['JAR_FILE': "${bootJar.archiveFileName.get()}"])
}
// 测试
test {
useJUnitPlatform()
}
之后我们点击下图所示的按钮,构建image
构建Docker image我们也可以自己手工输入命令
gradle build docker --info
构建成功后可以在Docker管理页面看到添加的image