使用Gradle构建SpringBoot项目Docker镜像

2,057 阅读2分钟

前言

使用Gradle快速构建SpringBoot项目Docker镜像,将镜像推送到阿里云远程镜像仓库。

本文使用到的素材:Gradle构建的SpringBoot项目,Docker环境,docker-compose(非必需)。

本文项目源码地址:GitHub

SpringBoot项目基础项目

  1. 类型选择Gradle
image-20210109182332495
  1.  勾选MVC依赖
image-20210109182501845
  1. 目录结构

    image-20210109183018459
    1. 修改application配置文件修改端口

    image-20210109190501195

    1. 添加一个接口用于测试是否启动成功
    image-20210109190704656

修改build.gradle文件

配置镜像加快下载速度

repositories {
    mavenLocal() // 配置先从本地仓库寻找jar包,优先寻找上一个配置,找到不执行下面的配置
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    mavenCentral()
}

添加docker-spring-boot插件

id 'com.bmuschko.docker-spring-boot-application' version '6.6.1'

添加docker构建配置

docker {
    springBootApplication {
        baseImage = 'openjdk:8-alpine' // 用于Spring Boot应用程序的Docker基本映像。
        maintainer = 'codelong' // 镜像维护者
        ports = [8080] // 暴露的端口
        // 镜像名称和版本
        images = ["${project.group}/${rootProject.name}:${project.version}",
                  "${project.group}/${rootProject.name}:latest"]
        // 传递给java命令的JVM参数。
        jvmArgs = ["-Djava.security.egd=file:/dev/./urandom", '-Xmx2048m']
        // 用于启动应用程序的主类名称。如果您的源代码包含多个主类文件,则为此选项设置一个显式值很有用。
        // mainClassName = 默认通过扫描类路径发现的唯一主类名称
    }
    // 如果url不指定的话
    // Unix系统默认:unix:///var/run/docker.sock
    // Windows系统默认:tcp://127.0.0.1:2375。
    // url = 'https://192.168.3.103:2375'
}

修改后完整的build.gradle

plugins {
    id 'org.springframework.boot' version '2.4.1'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    // docker-spring-boot插件
    id 'com.bmuschko.docker-spring-boot-application' version '6.6.1'
    id 'java'
}

group = 'com.codelong'
version = '1.0.0'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenLocal() //配置先从本地仓库寻找jar包,优先寻找上一个配置,找到不执行下面的配置
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    mavenCentral()

}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

// docker构建配置
docker {
    springBootApplication {
        baseImage = 'openjdk:8-alpine' // 用于Spring Boot应用程序的Docker基本映像。
        maintainer = 'codelong' // 镜像维护者
        ports = [8080] // 暴露的端口
        // 镜像名称和版本
        images = ["${project.group}/${rootProject.name}:${project.version}",
                  "${project.group}/${rootProject.name}:latest"]
        // 传递给java命令的JVM参数。
        jvmArgs = ["-Djava.security.egd=file:/dev/./urandom", '-Xmx2048m']
        // 用于启动应用程序的主类名称。如果您的源代码包含多个主类文件,则为此选项设置一个显式值很有用。
        // mainClassName = 默认通过扫描类路径发现的唯一主类名称
    }
    // 如果url不指定的话
    // Unix系统默认:unix:///var/run/docker.sock
    // Windows系统默认:tcp://127.0.0.1:2375。
    // url = 'https://192.168.3.103:2375'
}

test {
    useJUnitPlatform()
}

点击刷新按钮后会看到多了一些任务命令

image-20210109185636466
  • dockerBuildImage:创建Docker镜像。
  • dockerCreateDockerfile:生成Dockerfile文件。
  • dockerPushImage:推送Docker镜像。
  • dockerSyncBuildContext:将应用程序文件复制到临时目录以创建Docker镜像。

构建Docker本地镜像

这里为了方便演示就在本地构建进行启动,本地需要有docker环境。

查看docker版本

image-20210109190832248

点击执行构建任务

image-20210109191057715

查看镜像

docker images
image-20210109191233715

启动容器

装了docker-compose的可以通过docker-compose.yml启动

version: '3.1'
services:
  xiaoyan-oss-file:
    image: com.codelong/l-gradle-springboot-docker:latest
    container_name: l-gradle-springboot-docker
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - 8080:8080

没装docker-compos的可以通过run命令启动

docker run --name l-gradle-springboot-docker -d -p 8080:8080 com.codelong/l-gradle-springboot-docker:latest

查看容器是否启动成功

docker ps
image-20210109191940795

访问测试

浏览器访问:http://127.0.0.1:8080/

image-20210109192334882

访问成功。