当前位置: 首页 > 工具软件 > gradle-docker > 使用案例 >

Gradle使用Docker插件创建镜像并推送仓库

文嘉禧
2023-12-01

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。

build.gradle

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构建

docker {
	url = 'tcp://ip:port'
    springBootApplication {
        baseImage = 'openjdk:8-alpine'
        ports = [8080]
        images = ['test:1.0.0', 'test:latest']
        jvmArgs = []
    }
}

使用远程Docker构建,并推送仓库

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!

 类似资料: