热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

dockerregistrypush覆盖_Gradle第15课:与Docker的结合使用

需要准备一个熟悉的IDE开发工具JDK7及以上Gradle3.2以上Docker17容器化项目1.传统的方式运行springboot项目还是使用上章中login工程,
5739a0a3e39f81c2e780d99c7cee55a5.png

需要准备

  • 一个熟悉的 IDE 开发工具
  • JDK 7及以上
  • Gradle 3.2以上
  • Docker 17

容器化项目

1.传统的方式运行 spring boot 项目

还是使用上章中 login 工程,我们在 login 工程目录下执行gradle build编译命令,并在 build/libs 目录下生成了项目的 jar 包,接下来在命令行直接运行java -jar build/libs/login.jar启动 spring boot 项目,然后使用 Postman 访问 http://localhost:8080/cm/login/ 接口,返回正常数据,如下图:

4b16f744e6902c10e8ea6b5eee337da2.png

2.对项目进行容器化

Docker 一般会使用一个叫 Dockerfile 的文件来定义镜像层,所以我们也在 login 工程止录下创建一个叫 Dockerfile 的文件,在其中来定义如下代码:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/login.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar

其中 FROM 代表我们自己的镜像是从 openjdk:8-jdk-alpin 继承而来的。

VOLUME 挂载了 /tmp 目录到容器中,此目录为 Spring Boot 为 tomcat 创建的默认目录。

ENTRYPOINT 在容器启动后执行 java 命令来运行程序。

定义好 Dockerfile 文件后,我们再修改一下我们的 build.gradle 文件,在其中添加以下代码:

buildscript {...dependencies {...classpath('se.transmode.gradle:gradle-docker:1.2')}
}group = 'springio'...
apply plugin: 'docker'task buildDocker(type: Docker, dependsOn: build) {applicationName = jar.baseNamedockerfile = file('Dockerfile')doFirst {copy {from jarinto "${stageDir}/target"}}
}

这里使用了 Docker 插件,该插件的具体用法请参见 Docker官网。这里我们在 buildDocker 任务中添加了 doFirst 方法,主要是把通过 jar 任务生成的归档文件拷贝到 target 目录下,因为在我们的 Dockerfile 文件中使用了ADD target/login.jar app.jar命令从 target 目录中把 login.jar 包添加到镜像中的。

最后 login 工程完整的 build.gradle 代码如下:

buildscript {ext {springBootVersion = '1.5.8.RELEASE'}repositories {mavenCentral()}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")classpath('se.transmode.gradle:gradle-docker:1.2')}
}apply plugin: 'org.springframework.boot'
apply plugin: 'docker'group = 'billyang'ext {springCloudVersion = 'Dalston.SR4'
}dependencies {compile("org.springframework.boot:spring-boot-starter-web")compile("org.springframework.boot:spring-boot-starter-data-jpa")compile("mysql:mysql-connector-java:5.1.38")compile("commons-codec:commons-codec:1.10")testCompile('org.springframework.boot:spring-boot-starter-test')
}dependencyManagement {imports {mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"}
}jar {baseName = 'gs-spring-boot-docker'version = '0.1.0'
}task buildDocker(type: Docker, dependsOn: build) {applicationName = jar.baseNamedockerfile = file('Dockerfile')doFirst {copy {from jarinto "${stageDir}/target"}}
}

然后通过执行gradle buildDocker命令来生成 Docker 镜像。我们可以在控制台执行docker images命令来查看生成的镜像,如下图:

6c5128a74f60414e3cf747fb5aa56d19.png

然后再运行命令docker run -p 8080:8080 -t springio/gs-spring-boot-docker来启动容器,并绑定8080端口。使用docker ps命令来查看容器启动情况:

e0107db870acf2b333fad9880fe47824.png

最后我们还是通过 Postman 来验证登陆服务是否启动正常了,最后返回结果和之前传统方式一样,证明我们的登陆服务通过容器化已经启动成功了。

3,发布到远程 Docker 仓库,并启动镜像

在上一节中,我们的镜像只是在本地,如果想要发布到远程的 Docker 仓库中,又该怎么实现呢?其实这只需要一行代码就够了。那就是在 buildDocker 任务中添加push = project.hasProperty('push'),添加后的 buildDocker 代码如下:

task buildDocker(type: Docker, dependsOn: build) {applicationName = jar.baseNamepush = project.hasProperty('push') //这行是新添加的dockerfile = file('Dockerfile')doFirst {copy {from jarinto "${stageDir}/target"}}
}

然后我们只需要在执行构建脚本时添加push参数就好,完整的命令如下:

gradle buildDocker -Ppush

当然,如果就这么执行肯定会报错的,因为我们还没有登陆 Docker 仓库,所以请先执行以下命令进行登陆:

$ docker login

输入正确的帐号和密码后,再执行gradle buildDocker -Ppush命令,然后登陆 https://hub.docker.com/ 查看是否发布成功,结果见下图:

35a152f984f58d8f46ac1185905ce888.png

小结

在本章中我们通过 Gradle 实现了 login 服务的容器化,并向 Docker Hub 仓库中发布了镜像。

如果你有疑问欢迎加微信咨询:

https://u.wechat.com/MDHWBbNbJRv36gtFwfExkEo (二维码自动识别)

也可以关注我的公众号想我提问:

http://weixin.qq.com/r/EEzl-dLE5Y_arZae9xkC (二维码自动识别)



推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文介绍如何使用线段树解决洛谷 P1531 我讨厌它问题,重点在于单点更新和区间查询最大值。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
author-avatar
鸟的蛋蛋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有