废话不多说了,开整:
- 该流程接上次博客中创建的 多模块项目 接着搞. 多模块项目如果要加入 docker 必须要在主项目中引入 docker 插件依赖:
buildscript {
ext {
springBootVersion = '1.5.9.RELEASE'
springRepo = 'https://plugins.gradle.org/m2/'
}
repositories {
maven { url springRepo }
jcenter()
mavenLocal()
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("se.transmode.gradle:gradle-docker:1.2")
}}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
上面有个坑要注意下, 仓库地址由原来的那啥地址换成了
https://plugins.gradle.org/m2/
因为原来的地中没有 docker 插件的依赖, 所以这里要注意下
2. 开始第二步, 在入口处的依赖(gradle.build)中引入对 docker 插件的设置, 什么叫入口处, 就是整个多模块项目主项目的入口, 我们目前的入口是 api 模块, 所以在 api 模块下的 gradle.build 写下配置文件
apply plugin: 'application'
apply plugin: 'docker'
jar {
baseName 'spring-boot-gradle-for-docker'
version '1.0'
}
distDocker {
baseImage 'openjdk'
maintainer 'harrison'
}
task dockerBuilder(type: Docker) {
applicationName = jar.baseName
tagVersion = jar.version
volume('/tmp')
addFile("${jar.baseName}-${jar.version}.jar", "app.jar")
entryPoint(["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", 'app.jar'])
exposePort(8081)
doFirst {
copy {
from jar
into stageDir
}
}
}
什么意思? 这里的步骤少了像市面上的 Dockerfile, 我是很烦那个破文件, 放哪儿容易搞错, 这种就避免了这种尴尬问题
3. 至此配置就 ojbk 了! 我再上传修改过的两个文件一次, 先上主项目的 gradle.build 完整文件
def vJavaLang = '1.8'
def bootProjects = [project(':api')]
def gradleDir = "${rootProject.rootDir}/gradle"
group = 'com.keppel'
version = '0.0.1-SNAPSHOT'
buildscript {
ext {
springBootVersion = '1.5.9.RELEASE'
springRepo = 'https://plugins.gradle.org/m2/'
}
repositories {
maven { url springRepo }
jcenter()
mavenLocal()
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("se.transmode.gradle:gradle-docker:1.2")
}
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
subprojects {
apply plugin: "eclipse"
apply plugin: "idea"
apply plugin: 'java'
targetCompatibility = vJavaLang
sourceCompatibility = vJavaLang
repositories {
mavenLocal()
jcenter()
mavenCentral()
}
}
configure(bootProjects) {
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
targetCompatibility = vJavaLang
sourceCompatibility = vJavaLang
repositories {
mavenLocal()
jcenter()
mavenCentral()
}
}
再上入口子模块的 gradle.build 文件完整版
jar {
baseName = 'keppel-api'
version = '0.0.1-SNAPSHOT'
}
springBoot {
mainClass = 'com.keppel.ApiApplication'
}
dependencies {
compile project(':common')
compile project(':user')
compile('io.jsonwebtoken:jjwt:0.9.0')
compile('org.springframework.boot:spring-boot-starter-mobile')
compile('org.springframework.boot:spring-boot-starter-security')
compile("org.springframework.boot:spring-boot-starter-web")
testCompile('org.springframework.boot:spring-boot-starter-test')
}
apply plugin: 'application'
apply plugin: 'docker'
jar {
baseName 'spring-boot-gradle-for-docker'
version '1.0'
}
distDocker {
baseImage 'openjdk'
maintainer 'harrison'
}
task dockerBuilder(type: Docker) {
applicationName = jar.baseName
tagVersion = jar.version
volume('/tmp')
addFile("${jar.baseName}-${jar.version}.jar", "app.jar")
entryPoint(["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", 'app.jar'])
exposePort(8081)
doFirst {
copy {
from jar
into stageDir
}
}
}
如果你开发主机为 win 系列的你可以直接通过 idea 来进行 build
双击命令就可以了
镜像文件找不到在哪儿, 反正就是 api.tar 里面的吧
真正的是通过 Ubuntu 来进行打包, 贴个自己写的脚本, 亲测已经打包 docker 成功
// 进入项目目录
cd keppelfei
// 拉取最新代码
git pull
// 切换分支到主分支
git checkout master
// 开始打包啦
./gradlew clean build dockerBuilder --info
// 停止正在运行的docker镜像进行替换
docker stop gradle-boot
// 删除所有已停止的镜像
sudo docker rm $(sudo docker ps -a -q)
// 导入打包好的镜像
docker images
// 开始以gradle-boot为命名启动刚打好的镜像
docker run -d --name gradle-boot -p 8081:8081 keppel/spring-boot-gradle-for-docker:1.0
至此结束了, 有什么问题欢迎留言!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于