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

gradle docker

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

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

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

例如,一个快速而肮脏的“ 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

gradle docker

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

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

相关文章

python socket编程_Python学习记录-socket编程

1. OSI七层模型详解2. Python socket 什么是 Socket? Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 Python 提供了两个级别访问的网络服务: 低级别的网络服…

判断frame是否已创建_类的创建

1. 士兵 许三多 有一把 AK47 2. 士兵 可以开火 3. 枪 能够 发射 子弹 4. 枪 装填 子弹---增加子弹数量 class Gun:def __init__(self,type):self.type type# 刚开始枪没有子弹self.bullet_count 0def __str__(self):return ("%s 已到位" % self.type)def shoot(sel…

@select注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发

上一篇文章:《Mybatis基本知识十六:查询缓存之第三方查询缓存》若文中有纰漏,请多多指正!!!1.前言使用Mybatis进行开发,不仅可以使用mapper配置文件进行开发,也可以使用注解的方式。映射文件中无…

maven servlet配置_第一个Servlet配置

使用IntelliJ IDEA创建一个Simple Maven项目2. Add Framework Support3. 配置Tomcat打开菜单Run -> 选择Edit Configuration 如果侧边栏没有Tomcat,点击“”号 -> 选择“Tomcat Server” -> 选择“Local”,到此画面 ,Apply -> OK4. 在Tomcat…

ad域管理与维护_U-Mail邮件系统LDAP/AD同步极大提升办公效率

每一位办公族,可能都遇到过这样的问题:1、随着信息化高速发展和企业“互联网”的深入,越来越多的办公平台和软件被开发出来,正如移动互联网端APP应用层出不穷一样,给人们带来了极大地便利性。2、凡事有利有弊&#xff…

c语言c99标准_C语言的灵魂指针,配合这个新增的关键字,能够生成更高效的程序...

正如我前面的文章提到的,C语言虽然已经比较成熟,但是近些年来也是有所发展的——比如增加了许多新特性。遗憾的是,可能因为C语言程序员的工资比不过互联网程序员,国内很多教材比较老旧,几乎不涉及近些年来C语言新增的新…

java ee的小程序_Java EE 8 –为更多设备提供更多应用程序

java ee的小程序如果我不喜欢夏天的一件事,那就是事实是没有太多要分享或谈论的新闻。 谁决定将Java Day Tokyo置于今年的这个无聊的时间里,做得很好,并给了我一个写关于新的和即将到来的Java EE 8规范的博客帖子的机会,其中丰富了…

java随机姓名_Java生成随机姓名、性别和年龄的实现示例

一、定义实体类Person,封装生成的数据package net.dc.test;public class Person {private String name;private String sex;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public String getSex() {r…

matlab 图像 幅度谱 低通滤波_数字图像处理期末复习2018-12-21

数字图像处理期末复习2018-12-21愉快先生0.204字数 5547 阅读 18342018-12-22 19:35(数字图像冈萨雷斯第二版教材)一、基本原理图像的读取、存储操作:i imread(filename) ; imwrite(i,’image.jpg’); 图像显示的⽅法及区别:imshow(i); imshow(i,[]);%0…

大话oraclerac集群、高可用性、备份与恢复_Oracle RAC结构

Oracle RAC结构Oracle真正集群的出现是在Oracle公司收购Rdb并吸收了相关技术优势后,才正在推出了属于自己的RAC集群解决方案。RAC​和集群分类章节提到的集群系统有很多相似之处,从下图我们大概了解一下RAC集群的层次结构和所需的软硬件环境。Oracle Rac…

java obix_obix协议在java中的配置和使用详解

前言本文主要给大家介绍的是关于obix协议在java中的配置和使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。什么是 oBIX?简单来讲,obix是一种 XML 通讯协议,使用Http Request/Post方式进行数据通…

java7和java8切换_仍不切换到Java 8的6个理由

java7和java8切换Java 8很棒。 期。 但是……在我们有机会玩耍并玩弄它之后,就该退出了,避免吃盐。 所有的好东西都是有代价的,在这篇文章中,我将分享Java 8的主要痛点。请确保在升级和释放7之前您已经意识到了这些痛点。 1.并行…

python求阶乘之和_python计算阶乘前n项和

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 知道公式后就很简单了,利用for循环,第几行i1就等于几,当然python中是没有…

您需要了解的有关UI测试的所有信息

让我们从一个问题开始。 用户在网站上进行互动的第一件事是什么? 接口,当然。 网站的外观是在用户身上产生“第一印象”的第一件事。 交互式Web应用程序可以为用户带来成败,这就是为什么越来越多的人选择对其Web应用程序进行UI测试的原因。 …

python合并word单元格_python之DataFrame实现excel合并单元格_python

这篇文章主要为大家详细介绍了python之DataFrame实现excel合并单元格,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在工作中经常遇到需要将数据输出到excel,且需要对其中一些单元格进行合并,比如如下表表格,需要…

java做服务器端给客户端传数据包_java 服务器怎样给客户端传输数据

展开全部服务器端源码:import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Se…

pooled-jms_Hibernate隐藏的宝石:pooled-lo优化器

pooled-jms介绍 在这篇文章中,我们将揭示一个序列标识符生成器,​​它结合了标识符分配效率和与其他外部系统的互操作性(同时访问底层数据库系统)。 传统上,有两种序列标识符策略可供选择。 序列标识符,对…

apache geode项目结构_Apache Flink-基于Java项目模板创建Flink应用(流计算和批计算)...

Apache Flink创建模板项目有2种方式:1. 通过Maven archetype命令创建;2. 通过Flink 提供的Quickstart shell脚本创建;关于Apache Flink的环境搭建,请参考相关链接:Apache Flink快速入门-基本架构、核心概念和运行流程A…

matlabif语句怎么用_公益心 码客行(2)—— 简单语句

回顾与反思&#xff1a;cout语句的用法关于第一课的思考与实践问题&#xff0c;有答案了吗——请写出这个程序的输出结果。#include using namespace std;int main(){cout<<1<cout<<12<return 0;}提示&#xff1a;输出结果如下。13即&#xff1a;输出项为数值…

java 多线程 聊天_Java做一个多线程类似于QQ的聊天程序。

展开全部//时间关系,粗略的做了一下,一个模拟UDP协议的测试,图标,IP,以及端口都可以设成//发送者端的电脑参数32313133353236313431303231363533e78988e69d8331333366306533!import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.e…