项目构建--Gradle--Docker打包(五)

一、se.transmode.gradle 插件打包

  1. 添加插件
buildscript {
    dependencies {
        // docker插件
        classpath('se.transmode.gradle:gradle-docker:1.2')
    }
}
  1. 应用插件
    // docker插件
    apply plugin: 'application'
    apply plugin: 'docker'

如果添加了 application 插件的话,默认 gradle-docker 插件会添加一个 distDocker 的 gradle task,用来构建一个 包含所有程序文件 的 docker 镜像。

  1. 配置镜像构建信息
    配置group
 group 'com.xtsz.iot'

配置镜像名称和版本号

version '1.0.0'

其中镜像的 tag 默认的构成为:项目组/应用名称:版本号

tag = "${project.group}/${applicationName}:${tagVersion}"

project.group:标准的 gradle 属性,如果不进行定义,插件默认会 省略 ${project.group} 这个属性。
applicationName:应用被容器化时的 名称。
tagVersion:可选属性,会作为镜像的 标签。默认值为 project.version,如果未指定 project.version,则使用 latest 作为标记。
配置docker构建基础信息:

distDocker {
    baseImage = "openjdk"
    maintainer = "marquis"
}

其中,baseImage 相当于 Dockerfile 中声明的 FROM。声明了在 构建镜像 是基于的 Image,maintainer 相当于 MAINTAINER ,声明了 镜像作者。如果声明了 registry 地址,插件在 镜像射生成后 可以自动 push 到该地址。其他的配置还包括 docker hub 的 地址、用户名 和 密码。

docker {
    baseImage 'openjdk'
    maintainer 'marquis'
    useApi true
    hostUrl 'http://myserver:4243'
    apiUsername 'user'
    apiPassword 'password'
    apiEmail '[email protected]'
}

  1. 添加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)

taskBuilder 的任务配置:

task dockerBuilder(type: Docker) {
    applicationName = jar.baseName
    tagVersion = jar.version
    volume('/tmp')
    addFile("${archivesBaseName}-${version}.jar", "app.jar")
    entryPoint(["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", 'app.jar'])
    exposePort(8080)
    doFirst {
        copy {
            from jar
            into stageDir
        }
    }
}

构建完成以后,项目根目录的 build/docker 文件夹下面会出现 Dockerfile 和 spring-boot-gradle-for-docker-1.0.jar 文件。其中,以上的 task 等同于以下的 Dockerfile。

FROM aglover/java8-pier
VOLUME ["/tmp"]
ADD spring-boot-gradle-for-docker-1.0.jar app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
EXPOSE 8080

如果觉的在 task 中编写 Dockerfile 替换脚本 非常别扭,也可以直接在 task 中指定 Dockfile 的 文件路径,直接使用已有的文件来生成镜像:

task buildDocker(type: Docker) {
    applicationName = jar.baseName
    tagVersion = jar.version
    dockerfile = file('Dockerfile')
    doFirst {
        copy {
            from jar
            into stageDir
        }
    }
}

通过 file() 指定 task 使用位于 项目根目录 的 Dockerfile 来生产镜像。

  1. 编译并构建Docker镜像
    进入项目根目录,运行 gradle 命令进行打包构建。
$ ./gradlew clean build dockerBuilder --info

gradle 首先会运行 本地测试,然后进行项目打包,进一步根据 docker-gradle 插件进行镜像构建。
等待出现 BUILD SUCCESSFUL 就表明任务运行成功。可以观察到镜像的名称为:

io.ostenant.springboot.sample/spring-boot-gradle-for-docker:1.0

运行 docker images 查看本地镜像,进一步验证镜像构建成功。

二、com.palantir.docker 插件打包

  1. 父模块
//  添加插件
plugins {
  id "com.palantir.docker" version "0.22.1"
}
// 添加仓库与插件依赖
buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.22.1"
  }
}
// 应用插件
 apply plugin: 'application'
 apply plugin: "com.palantir.docker"
  1. 子模块
archivesBaseName = 'iot-eruake'
mainClassName='com.xtsz.iot.eruake.IotEruakeApplication'
//依赖
dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
}

三、使用IdeaDocker插件布署

  1. Idea安装插件


    Idea安装插件

    安装docker插件
  2. 配置docker:


    配置docker

    远程连接

    连接
  3. 配置Dockerfile文件
    1)新建Dockerfile文件会自动弹出。


    配置Dockerfile

在工程根目录下新建Dockerfile文件,内容如下:

FROM openjdk:8
MAINTAINER marquis
COPY build/libs/iot-eruake-1.0.0.jar app.jar
RUN bash -c "touch /app.jar"
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

  1. 创建docker镜像


    创建docker镜像
创建docker镜像
运行打包Docker

打包过程
  1. 发布完成


    发布完成

你可能感兴趣的:(项目构建--Gradle--Docker打包(五))