如何用Gradle创建Docker镜像

Posted 分布式实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Gradle创建Docker镜像相关的知识,希望对你有一定的参考价值。

Mesos Elasticsearch中使用的Docker镜像

在Mesos Elasticsearch中我们创建了两个Docker镜像。第一个镜像是mesos/elasticsearch-scheduler,这个镜像包含Elasticsearch scheduler的可执行jar 文件。用Marathon创建镜像,可以部署该文件。第二个镜像是mesos/elasticsearch-cloud-mesos,它包含了elasticsearch和cloud-mesos插件,用于scheduler调度的容器。我将在本篇博客中展示如何用Gradle创建这些容器。了解更多Mesos Elasticsearch的内容,请看 Mesos Elasticsearch Github page。这个项目由Cisco Cloud Services赞助。

启用Gradle中的Docker插件

现在我们来讲下Gradle。 在build.gradle首行添加下述命令,启用Docker中的bmuschko插件。

apply plugin: `com.bmuschko.docker-remote-api`

然后还要添加Gradle下载插件的来源库。

buildscript {
repositories {
   jcenter()
  }
  dependencies {
    classpath 'com.bmuschko:gradle-docker-plugin:2.2'
  }
}
Docker Gradle tasks

下面我来解释如何创建mesos/elasticsearch-scheduler镜像。请看scheduler/build.gradle的部分命令。我删除了dependency和buildscript的定义,因为它们与此无关。

jar {
    baseName = "elasticsearch-mesos-scheduler"
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    manifest { attributes 'Main-Class': 'org.apache.mesos.elasticsearch.scheduler.ElasticsearchScheduler' }
}

task copyJar(type: Copy) {
    dependsOn   'jar'
    from        "build/libs/elasticsearch-mesos-scheduler-${project.version}.jar"
    into        'build/docker'
    rename { String fileName ->
        fileName.replace("-${project.version}", "")
    }
}

task buildDockerImage(type: DockerBuildImage) {
    dependsOn   copyJar
    if (System.env.DOCKER_HOST) {
        url = "$System.env.DOCKER_HOST".replace("tcp","https")
        if (System.env.DOCKER_CERT_PATH) {
            certPath = new File(System.env.DOCKER_CERT_PATH)

        }
    }
    else {
        url = 'unix:///var/run/docker.sock'
    }
    inputDir = file('.')
    tag = 'mesos/elasticsearch-scheduler'
}

build.dependsOn buildDockerImage
build.dependsOn copyJar

这里涉及到三个task。第一个,jar,创建了包括dependency的可执行scheduler jar文件。在创建Docker镜像之前,我们需要把该jar文件复制到build/docker文件夹中。复制要靠第二个task——copy来完成。因为版本剥离(stripped)的关系,Dockerfile中的CMD一直都是java -jar elasticsearch-mesos-scheduler.jar。第三个task,运行docker。这里有DockerBuildImage类型,有来自第二个copy task的dependency,设置inputDir,链接到DOCKER_HOST或者使用套接字socket进行链接。

你也看到了,用Gradle创建Docker镜像相当直接明了。了解更多关于其他Docker task的信息,请看Docker Gradle task types(https://github.com/bmuschko/gradle-docker-plugin/tree/master/src/main/groovy/com/bmuschko/gradle/docker/tasks)。

DockOne.io
DockOne,新圈子,新思路,新视野。


以上是关于如何用Gradle创建Docker镜像的主要内容,如果未能解决你的问题,请参考以下文章

Gradle项目构建docker镜像(支持Gradle多模块)

手拉手教你如何用docker部署mysql redis nginx tomcat

手拉手教你如何用docker部署mysql redis nginx tomcat

如何用Docker部署Spring Boot项目

如何用IDEA创建SpringBoot Gradle多项目工程?

如何用服务器搭建一个Meteor国内包镜像源