您是否需要通过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

带有Gradle的Docker容器分为4个步骤相关推荐

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

    gradle docker 您是否需要通过Java Web应用程序创建Docker映像? 您在使用Gradle吗? 如果是这样,那么您距Docker nivana仅4步之遥. 对于此示例,我将使用一个 ...

  2. 技术选型之Docker容器引擎

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | huashiou 来源 | https://s ...

  3. Docker容器及Spring Boot微服务应用

    2019独角兽企业重金招聘Python工程师标准>>> Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复 ...

  4. 美团点评Docker容器管理平台

    本文是郑坤根据第14期美团点评技术沙龙"你不知道的美团云"演讲内容整理而成,已发表在<程序员>杂志2017年1月刊. 美团点评容器平台简介 本文介绍美团点评的Docke ...

  5. Docker容器技术 笔记

    Docker容器技术 Docker是一门平台级别的技术,涉及的范围很广,所以,在开始之前,请确保你完成:Java SpringBoot 篇(推荐完成SpringCloud篇再来)视频教程及之前全部路线 ...

  6. 微服务架构,springcloud核心组件和实战,docker容器

    文章目录 前言 一.微服务开发基础 1.微服务架构开发 1.1单体架构的应用的困境 1.2 微服务架构 1.2.1 理解微服务架构 1.2.1 微服务的优缺点 1.3 微服务架构设计 1.3.1 微服 ...

  7. docker 容器技术

    docker 容器技术 一.学习目标 了解 Docker 与虚拟机的不同点,相比的优势 掌握 Docker 的启动方法.镜像与容器操作 掌握 Mysql tomcat Nginx Redis 等容器的 ...

  8. Docker容器部署

    1.Docker简介 1.1虚拟化 1.1.1什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象 ...

  9. docker安装、docker容器基本用法

    docker的概念 Image(镜像)  Container(容器)  Repository(仓库)  镜像(Image)就是一堆只读层(read-only layer)的统一视角  容器(conta ...

最新文章

  1. mysql中如何设置过滤器_mysql 如何动态修改复制过滤器
  2. Drug Discovery Today | 频繁命中化合物机制探究:PAINS规则的局限性
  3. SubclassWindow和SubclassDlgItem
  4. 基于事件驱动架构构建微服务第11部分:持续集成
  5. html打印预览出现重叠,html – 使用打印模式css打印网页时页眉和正文内容重叠...
  6. java 类加载器卸载,【深入明白Java虚拟机 】类加载器的命名空间以及类的卸载...
  7. Gitlab项目迁移
  8. 6月全球浏览器份额之争:霸主IE份额持续降至54%
  9. linux运行关关采集器,杰奇远程采集教程linux下远程采集
  10. 深蓝学院-视觉SLAM课程-第4讲作业(T5矩阵微分,T6手写高斯牛顿,T7批量MLE)
  11. WTL 自绘控件库 (CQsAnimaStatic)
  12. 剑网3服务器延迟高,关于《剑网3》网络延迟的一些理论分析
  13. Android 图片文件读取
  14. A/B 测试:数据驱动的产品优化
  15. 文件夹成变成.exe 解决办法
  16. iphone连电脑服务器未响应,今天要闻iphone8无限转圈黑屏强制关机没反应(苹果电脑开不了机黑屏)...
  17. 【luogu 3397】地毯 差分
  18. C语言头文件下载迅雷,LLVM汇编|clang llvm(C语言编译器)下载v3.4 免费版 - 欧普软件下载...
  19. 解决Silverlight无法调试的问题
  20. 【MacOS】上班一条命令启动所需软件

热门文章

  1. 让浏览器认为现在处于登录状态
  2. controller如何保证当前只有一个线程执行_聊聊Spring线程安全,读完之后,大部分程序员收藏了......
  3. 利用ant构建 jsp-servlet-class-jar
  4. java中延迟_Java中的延迟分配
  5. jw摄像_Java命令行界面(第17部分):jw-options
  6. 琥珀ai_琥珀项目:Java的未来暴露
  7. portlet_平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术
  8. repl java9_Java 9抢先体验:与JShell进行动手实践– Java REPL
  9. jdk8分组统计字段和_JDK 8流和分组
  10. java se/ee_嗨,您好 。 。 ! 您如何评价Java / Java EE技能?