使用 Gradle 构建 Spring-Boot 的 Docker 镜像
2019-06-10 16:57
686 查看
通常我们使用 Dockerfile 来构建项目的Docker 镜像,但是也有需求希望使用 gralde 在编译项目的时候一起把镜像给构建并上传,所以该教程讲解了使用 gradle 编写配置 Dockerfile 并生成镜像的过程。
1. 添加依赖
教程使用gradle-docker插件来实现,在 Gradle 的脚本里配置 dockerfile 的构建镜像功能。
gradle-docker插件已经包含在 jCenter 和 MavenCentral中。所以只需要在
dependencies添加依赖就能使用 docker 插件。
build.gradle中的配置如下,其他配置省略:
[code]buildscript { ... dependencies { //添加gradle-docker 依赖,版本1.2 classpath 'se.transmode.gradle:gradle-docker:1.2' } }
2. 应用插件
添加以下代码到
build.gradle
[code]apply plugin: 'application' //可选配置 apply plugin: 'docker'
如果添加了
application插件的话,默认
gradle-docker插件会添加一个
distDocker的 gralde task,用来构建一个包含所有程序文件的 docker 镜像。
3. 配置镜像构建信息
- 配置 group:
[code]group = 'my-group'
- 配置镜像名字和版本号:
[code]jar { baseName = 'spring-boot-docker' version = '1.2.3' }
配置了以上信息之后,构建的 Docker 镜像名就是:my-group/spring-boot-docker:1.2.3,可以根据实际需要进行修改。
- 配置 docker 构建基础信息:
[code]docker { baseImage 'frolvlad/alpine-oraclejdk8:slim' maintainer 'mcjiffy mcjiffy@mcjiffy' registry 'localhost:5000' }
其中,
baseImage相当于
Dockerfile中声明的
FROM。声明了在构建镜像是基于的 Image,maintainer相当于
MAINTAINER声明了镜像作者。如果声明了
registry地址,插件在镜像射生成后可以自动 push到该地址。其他还可以配置 docker hub 的地址、用户名和密码,用来生成镜像后自动 push。
4. 添加task 任务
完成了配置,我们还需要添加一个task 用来在gradle 编译的时候能够执行镜像的构建。
插件提供了一些转换方法,用来指代
Dockerfile中的关键词语法,如下表,可以按照需求对照着来:
Dockerfile 关键词 | gradle task 方法 |
---|---|
ADD | addFile(Closure copySpec) |
addFile(String source, String dest) | |
addFile(File source, String dest) | |
CMD | defaultCommand(List cmd) |
ENTRYPOINT | entryPoint(List entryPoint) |
ENV | setEnvironment(String key, String val) |
EXPOSE | exposePort(Integer port) |
exposePort(String port) | |
RUN | runCommand(String cmd) |
USER | switchUser(String userNameOrUid) |
VOLUME | volume(String... paths) |
WORKDIR | workingDir(String dir) |
- 构建 spring-boot 项目 task 示例:
[code]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(8022) doFirst { copy { from jar into stageDir } } }
其中 applicationName和 tagVersion配置了插件生成镜像名称和 tag 的信息,默认插件配置为
tag = "${project.group}/${applicationName}:${tagVersion}",也可以自己指定固定值。
以上的 task 等同于
Dockerfile:
[code]FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD spring-boot-docker-1.2.3.jar app.jar ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom","-jar","app.jar" ] EXPOSE 8022
一个基础的 Spring-Boot 生成 docker 镜像的配置。
- 在 task 中使用已有的
Dockerfile
如果觉的在 task 中编写Dockerfile
替换脚本非常别扭,也可以直接在 task中指定Dockfile
的文件路径,直接使用已有的文件来生成镜像:
[code]task buildDocker(type: Docker) { applicationName = jar.baseName tagVersion = jar.version dockerfile = file('Dockerfile') doFirst { copy { from jar into stageDir } } }
指定task 使用位于项目根目录的
Dockerfile来生产镜像。
5.编译并构建 Spring-Boot 项目的 Docker 镜像
控制台中执行命令:
./gradlew clean build dockerBuilder --info
等待出现
BUILD SUCCESSFUL就证明编译成功了。
使用
docker images命令可以看到新生成了一个名为
my-group/spring-boot-docker,tag 是
1.2.3的镜像。
6. 其他用法
gradle-docker插件还提供了配置仓库地址、配置使用 Docker Remote Api 和 Docker Hub等用法,可以参考该项目的 GitHub 地址来进行配置使用:
https://github.com/Transmode/gradle-docker
相关文章推荐
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- 第一个SpringBoot web 应用使用maven构建Docker镜像并容器化运行
- 使用dockerfile 构建springboot 的docker镜像
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- Docker决战到底(七) 使用多阶段构建Spring Boot应用镜像
- 使用Gradle构建SpringBoot工程系列:第五篇:编写Spring Boot主类及第一次运行
- 使用Gradle构建SpringBoot工程系列:第六篇:SpringBoot 替换Tomcat为Jetty或UnderTow
- 使用gradle来构建Spring boot时遇到的问题
- spring boot利用docker构建gradle项目的实现步骤
- Spring Boot 在Gradle构建中使用Log4j日志
- SOA微服务案例springboot+mybatis使用gradle构建案例
- springboot log4j2配置,使用gradle构建
- 使用工具idea 2017.2开发,gradle构建项目,使用的技术有spring-boot、mybatis
- 使用gradle构建Spring boot项目
- 使用Dockerfile构建Springboot项目(视频)
- 使用Gradle构建SpringBoot工程系列:第二篇:开发环境准备
- Spring Boot 中使用 spring-boot-devtools (使用 Gradle 作为构建工具)
- 使用Gradle构建SpringBoot工程系列:第四篇:项目初始化(编辑build.gradle文件,引入项目基本配置及依赖)
- Spring Boot 项目构建 之 使用 Gradle 构建 Java 项目(Building Java Projects with Gradle)