本文讲的是如何用Gradle创建Docker镜像,
【编者的话】在本篇博客中,作者展示了如何用Gradle task创建Docker镜像。Gradle目前已有一些Docker插件。作者谈论的这个插件是用来为
Mesos Elasticsearch
创建scheduler镜像的。这个插件通用性非常强,因为它基本上为Gradle提供了Docker CLI的所有命令。
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 。
原文链接:How to build Docker images with Gradle (翻译:马远征 校对:李颖杰)
原文发布时间为:2015-06-16
本文作者:夕口夕
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:如何用Gradle创建Docker镜像