Gradle有众多插件,而与Docker相关的插件也不止一个,这里应用的是bmuschko的Docker插件
好处:用Gradle集成Docker,不用分开维护工程名称、版本号等其他信息,避免不必要的麻烦。而且构建、创建镜像、推送一气呵成。
官方文档
https://bmuschko.github.io/gradle-docker-plugin/
首先Gradle需要5.2以上版本。
其中有3个插件:
com.bmuschko.docker-remote-api 自定义任务,操作空间最大
com.bmuschko.docker-java-application Java应用程序使用
com.bmuschko.docker-spring-boot-application SpringBoot应用程序使用
com.bmuschko.docker-java-application与com.bmuschko.docker-spring-boot-application都是已com.bmuschko.docker-remote-api为基础进行的定制化封装,按需使用。
这里使用的是最傻瓜式的com.bmuschko.docker-spring-boot-application。
buildscript {
repositories {
// 使用国内阿里云仓库,下载速度快
maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}
}
dependencies {
// Docker插件
classpath('com.bmuschko:gradle-docker-plugin:6.4.0')
}
}
// 应用插件
apply plugin: 'com.bmuschko.docker-spring-boot-application'
docker {
springBootApplication {
baseImage = 'openjdk:8-alpine'
ports = [8080]
images = ['test:1.0.0', 'test:latest']
jvmArgs = []
}
}
在工程目录使用命令行执行
gradle dockerBuildImage
该插件默认使用本地的Docker进行操作的,这样就创建了一个有2个标签的镜像
查看一下创建出来的镜像
docker images
docker {
url = 'tcp://ip:port'
springBootApplication {
baseImage = 'openjdk:8-alpine'
ports = [8080]
images = ['test:1.0.0', 'test:latest']
jvmArgs = []
}
}
docker {
url = 'tcp://ip:port'
springBootApplication {
baseImage = 'openjdk:8-alpine'
ports = [8080]
images = ['仓库地址/test:1.0.0', '仓库地址/test:latest']
jvmArgs = []
}
registryCredentials {
url = '地址'
username = '用户名'
password = '密码'
}
}
在工程目录使用命令行执行
gradle dockerPushImage
为保持工程的独立性,可以将docker地址,仓库信息以参数形式执行构建
docker {
if(project.hasProperty('dockerUrl')) {
url = project.getProperties().get('dockerUrl') // docker地址
}
def registryHost = project.getProperties().get('registryHost'); // 镜像仓库地址
def registryCredentialUrl = project.getProperties().get('registryCredentialUrl'); // 镜像仓库验证地址
def registryCredentialUsername = project.getProperties().get('registryCredentialUsername'); // 镜像仓库验证用户名
def registryCredentialPassword = project.getProperties().get('registryCredentialPassword'); // 镜像仓库验证密码
def imageName = "${project.archivesBaseName}"
if(registryHost) {
imageName = "${registryHost}/${imageName}"
}
springBootApplication {
baseImage = 'openjdk:8-alpine'
ports = [8080]
images = ["${imageName}:${version}", "${imageName}:latest"]
jvmArgs = ["-Duser.timezone=Asia/Shanghai"]
}
if(registryCredentialUrl && registryCredentialUsername && registryCredentialPassword) {
registryCredentials {
url = registryCredentialUrl
username = registryCredentialUsername
password = registryCredentialPassword
}
}
}
在工程目录使用命令行执行
gradle dockerPushImage -PdockerUrl='docker地址' -PregistryHost='仓库地址' -PregistryCredentialUrl='仓库验证地址' -PregistryCredentialUsername='仓库验证用户名' -PregistryCredentialPassword='仓库验证密码'
Done!