带有Gradle的Docker容器分为4个步骤

四门 您是否需要通过Java Web应用程序创建Docker映像? 您在使用Gradle吗? 如果是这样,那么您距Docker nivana仅4步之遥。

对于此示例,我将使用一个简单的Spring Boot应用程序。 您可以在我的名为galoshe的Github存储库中找到所有源代码。

如果您还没有机会看到Spring Boot的实际应用,那您将大饱口福, 尤其是如果SimpleJava Web App这句话在同一句话中让您畏缩不前。 在我认真看一下Boot之前,那肯定是我长期以来的反应。

例如,一个快速而肮脏的“ hello world”启动应用实质上是比实际代码更多的导入和注释。 一探究竟:

一个简单的Spring Boot应用程序

package com.github.aglover.galoshe;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {public static void main(String[] args) {ApplicationContext ctx = SpringApplication.run(Application.class, args);}@RequestMapping("/")public String index() {return "Hello to you, world";}
}

运行此应用程序就像输入命令一样简单:

$ java -jar build/libs/galoshe-0.1.0.jar

该命令将启动一个带有请求路径/映射的嵌入式Web容器,以返回简单的String “ Hello to you,world”。 您可以通过application.properties文件定义此应用程序将在哪个端口上运行,如下所示:

application.properties

server.port: 8080

因此,如果我使用浏览器并将其指向localhost:8080,我会看到行人,但是当您看到它的称呼时,真是太可喜了。

既然已经介绍了我想作为Docker容器分发的应用程序,那么让我通过4个简单的步骤向您展示如何做到这一点。

请记住,但是,为了插件我在这个例子中使用使用gradle这个-泊坞窗,你需要有码头工人作为插件安装弹出到docker命令。

第1步:应用一些插件

首先,要对应用程序进行Docker化,您需要使用两个Gradle插件: dockerapplication

Transmode的gradle-docker插件实际上是2个可用于Gradle Dockering的可用插件之一。 在其他插件通过本Muschko的Gradleware是额外的功能有点更先进的,但是,我觉得Transmode插件的最简单快捷的走了。

在我的特定示例中, application插件实际上是通过spring-boot插件自动包含的,但是,如果您不使用Boot,则需要在build.gradle文件中添加以下两个插件:

apply plugin: 'application'
apply plugin: 'docker'

由于docker插件是第三方插件,因此您需要通过dependencies子句告诉Gradle如何找到它。

指定docker插件的类路径

buildscript {repositories { mavenCentral() }dependencies {classpath 'se.transmode.gradle:gradle-docker:1.1'}
}

现在,您的Gradle脚本已准备好开始Docker-ing。 接下来,您需要提供一些线索,以便插件可以创建有效的Dockerfile

步骤2:提供一些属性

该gradle这个-泊坞窗插件不直接创建一个泊坞窗的集装箱-它仅仅是创建一个Dockerfile ,然后弹出到docker命令来建立形象。 因此,您需要在build.gradle文件中指定一些属性,以便相应的Dockerfile构建一个有效的容器,该容器可以自动运行您的应用程序。

您需要提供:

  • 要运行的类,即应用程序中包含main方法的类
  • 目标JVM版本(默认为Java 7)
  • (可选 )一个组ID,该ID馈入相应的Docker标签。

因此,我的build.gradle定义了所有三个属性,如下所示:

定义Docker插件的属性

group = 'aglover'
sourceCompatibility = 1.7
mainClassName = 'com.github.aglover.galoshe.Application'

有关这些属性的一些注意事项。 首先,该插件当前不支持Java 8 。 如果不指定sourceCompatibility ,你会得到的Java 7,接下来, group不需要财产; 但是,它有助于Docker标记。 例如,我项目的baseName被称为galoshe ; 因此,当插件创建Docker映像时,它将使用模式group/name标记该映像。 因此,在我的情况下,相应的图像被标记为aglover/galoshe

最后, mainClassName不会太令人惊讶-它是应用程序的钩子。 实际上,该插件将创建一个脚本,您生成的Docker映像将在启动时调用该脚本。 该脚本实际上将调用命令:

java -classpath your_class_path your_main_class

至此,您几乎完成了。 接下来,您需要指定任何Dockerfile指令。

步骤3:指定任何必需的Dockerfile指令

Dockerfile包含针对其创建的相应映像的专门说明。 有一些重要的 ; 但是,我的Boot应用程序仅需要一个: port ,它是通过插件的exposePort方法设置的。

因此,为了确保我的Docker容器公开application.properites文件中定义的端口8080,我将以下子句添加到build.gradle文件中:

指定端口8080

distDocker {exposePort 8080
}

您可以通过插件处理的其他一些方面是: addFile产生一条ADD指令, runCommand产生一条RUN指令,最后setEnvironment产生一个ENV指令。

现在,您已完成Gradle构建。 剩下要做的就是运行您的构建并启动映像!

步骤4:建立并执行

只要您已正确配置gradle-plugin,剩下要做的就是运行您的构建。 在这种情况下,命令就是distDocker

运行我的构建

$ ./gradlew distDocker

首次运行此命令时,将花费一些时间,因为将下载各种图像。 随后的运行将很快。

构建完成后,将使用我之前提到的标签创建图像。 就我而言,标记将是aglover/galoshe ,通过运行images命令可以快速看到它:

列出可用的本地Docker映像

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
aglover/galoshe     latest              332e163221bc        20 hours ago        1.042 GB
dockerfile/java     latest              f9793c257930        3 weeks ago         1.026 GB

随后,我可以像这样运行图像:

运行我的容器

docker run 332e163221bc

我自然可以转到浏览器,点击localhost:8080,对自己的图片很漂亮感到很满意。

当然,我需要发布此图像供其他人使用。 尽管如此,如您所见,gradle-plugin允许我快速为Java应用程序创建Docker容器。

翻译自: https://www.javacodegeeks.com/2014/06/docker-containers-with-gradle-in-4-steps.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ImagesSprite V1.1.1 Beta发布

ImagesSprite v 1.1 发布后有网友提出样式显示了,但不能复制,现做调整如下(20090804): 1.修正主界面下方css样式不能复制。 2.修正生成时透明色没有保存。【下载ImagesSprite V1.1.1 Beta】- 点击:4次转载于:https://w…

使用Spark构建简单的RESTful API

免责声明 :这篇文章是关于名为Spark的Java微型Web框架的,而不是关于数据处理引擎Apache Spark的 。 在此博客文章中,我们将看到如何使用Spark构建简单的Web服务。 如免责声明中所述,Spark是受Ruby框架Sinatra启发的Java微型Web框…

cf1206解题报告

目录 cf1206解题报告ABCDE&#xff0c;Fcf1206解题报告 A 模拟 #include <bits/stdc.h> using namespace std; int n,m,a[1010],b[12910]; int dsr[1111]; int main() {scanf("%d",&n);for(int i1;i<n;i) scanf("%d",&a[i]),dsr[a[i]]1;s…

canvas时钟

<!DOCTYPE html><html><head lang"en"><meta charset"UTF-8"><title></title></head><body><canvas id"canvas" width"500" height"500">您的浏览器不支持&#xff…

第七周

这个作业属于哪个课程C语言程序设计 &#xff08;第三版&#xff09;这个作业要求在哪里2019春季第七周作业我的课程目标学习指针的运用这个作业在哪个具体方面帮助我实现目标这个作业让我知道了指针实用性参考文献无一、2019春第七周作业&#xff08;基础题&#xff09; 7-2 自…

很久没来了,嘿嘿 问候一下大家,O(∩_∩)O哈哈~

很久没来了&#xff0c;嘿嘿。发现上次发帖正好是一个月以前哦&#xff0c;嘿嘿。最近职位火热招聘&#xff0c;有意向的快联系哦&#xff0c;嘿嘿1. BI Technical PM BI Technical PM Job Location: Redmond Oversea education or working background. 2 …

Java EE 8 –为更多设备提供更多应用程序

如果我不喜欢夏天的一件事&#xff0c;那就是事实是没有太多要分享或谈论的新闻。 谁决定将Java Day Tokyo置于这一年的无聊时间里&#xff0c;谁干得不错&#xff0c;就给我一个机会撰写有关新的和即将到来的Java EE 8规范的博客文章&#xff0c;其中包含了更多的思想和建议。…

全局预处理与执行,作用域与作用域链

一.全局预处理 <!DOCTYPE html><html><head lang"en"><meta charset"UTF-8"><title></title></head><body><p>全局预处理&#xff1a;首先会创建一个词法环境(Lexical Environment),然后扫面全局里…

2090. 「ZJOI2016」旅行者 分治,最短路

2090. 「ZJOI2016」旅行者 链接 loj 思路 \((l,mid)(mid1,r)\).考虑跨过mid的贡献。 假设选的中间那条线的点为gzy,贡献为\(dis(x,gzy)dis(gzy,y)\) 那就计算n遍最短路,一次分治为\(n^2mlog{nm}\) 设Sn*m.矩阵的长度是不定的&#xff0c;每次取最长的边进行分治是最好的&#x…

Xshell连接Linux慢问题解决办法

由于各种原因&#xff0c;经常更换网络环境&#xff0c;然后发现&#xff0c;每次更换网络环境后&#xff0c;xshell连接虚拟机的rhel或者CentOS都几乎是龟速.... 今天专门查了一下解决方案&#xff1a; 原来是ssh的服务端在连接时会自动检测dns环境是否一致导致的&#xff0c;…

Gradle入门:依赖管理

即使不是没有可能&#xff0c;创建没有任何外部依赖关系的现实应用程序也是一项挑战。 这就是为什么依赖性管理是每个软件项目中至关重要的部分的原因。 这篇博客文章描述了我们如何使用Gradle管理项目的依赖关系。 我们将学习配置已使用的存储库和所需的依赖项。 我们还将通过…

牛客NOIP暑期七天营-提高组1

牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子。 但是边权不为0 除了第一个有0的不行。 x连向上一个比他小的数。 期间判断有无解。 #include <bits/stdc.h> #define ll long long using namespace std; const int _2e57; int read() {int x0,f1;char sg…

BZOJ.4009.[HNOI2015]接水果(整体二分 扫描线)

LOJBZOJ洛谷 又是一个三OJ rank1&#xff01;w \(Description\) &#xff08;还是感觉&#xff0c;为啥非要出那种题目背景啊-直接说不好么&#xff09; 给定一棵树和一个路径集合&#xff08;每条路径有一个权值&#xff09;。\(Q\)次询问&#xff0c;每次询问给定一条路径&am…

HTML5常用标签及特殊字符表

*http://html5doctor.com/nav*http://html5doctor.com/article*http://html5doctor.com/section*http://html5doctor.com/asidehttp://html5doctor.com/divhttp://html5doctor.com/figurehttp://html5doctor.com/outlinehttp://html5doctor.com/semantics p 和 span 的理解 p标…

【转载】使用Imaging组件加载GIF动画

Mobil手机加载GIF动态图像的方法有两种&#xff0c;一个就是使用GIF89a标准算法&#xff0c;另一个就是使用SDK自带的Imaging组件&#xff0c;这两种方法是很典型的手机图像处理技术的实践。使用Imaging组件加载GIF比使用标准算法处理高效的多&#xff0c;特别是在处理真彩GIF动…

在Java中获取素数的无限列表

一个常见的问题是确定数字的素因式分解。 蛮力方法是审判部门&#xff08; 维基百科 &#xff0c; 可汗学院 &#xff09;&#xff0c;但是如果必须考虑多个数字&#xff0c;这需要大量的浪费工作。 一种广泛使用的解决方案是Eratosthenes筛&#xff08; 维基百科 &#xff0c…

CF888G XOR-MST trie,贪心

CF888G XOR-MST 链接 CF888G 思路 trie上贪心&#xff0c;先左右两边连边&#xff0c;再用一条边的代价连起左右两颗树。因为内部的边一定比跨两棵树的边权笑&#xff0c;显然是对的。 代码自己瞎yy的。启发式合并 代码 #include <bits/stdc.h> #define ll long long usi…

【处理手记】Configuration system failed to initialize异常的另类原因

有个c#程序在某台电脑上&#xff0c;执行某个操作时&#xff0c;总是会报如图错误&#xff1a; 度娘一番&#xff0c;发现市面上常见的原因是配置文件中的特定节点的位置不对&#xff0c;或者配置文件损坏等等&#xff0c;而这个程序根本没有使用内置的配置文件方案&#xff0c…

学习《Building Applications with FME Objects》 之四 从数据集读取要素

FMEOReader可以访问任何支持格式的数据。 FMEOReader返回两类要素&#xff1a;schema&#xff08;模式&#xff09;要素和数据要素&#xff0c;模式要素用于描述数据集模型。每种支持的格式都有一个模式&#xff0c;一个模式要素是一类要素的数据模型&#xff0c;模式要素描述属…

使用Zapier将应用程序与Neo4j集成

最近&#xff0c;我被带往Zapier &#xff0c;以便在系统之间完成一些轻量级的集成&#xff0c;以快速地进行概念验证。 最初是持怀疑态度的&#xff0c;我发现它确实可以节省时间&#xff0c;并将您从未集成过的系统所有部分捆绑在一起。 而且&#xff0c;这是人们集成他们使…