使用 docker+gradle 打包部署多模块 springboot 项目到 Ubuntu 服务器上

本贴最后更新于 2270 天前,其中的信息可能已经时移世改
有一段时间没写博客了, 最近比较忙. 前些日子朋友说想学docker, 本博客就是通过docker部署到Ubuntu服务器上的, docker可以看成一个虚拟机, 对于低配置服务器效果更加明显, 资源合理运用了. 至于更深层的好处可以去[docker中文文档](http://docs.docker-cn.com/) 看看, 这个大家应该很开心, 因为是中文, 讲的很细.

废话不多说了,开整:

  1. 该流程接上次博客中创建的 多模块项目 接着搞. 多模块项目如果要加入 docker 必须要在主项目中引入 docker 插件依赖:
buildscript { ext { springBootVersion = '1.5.9.RELEASE' springRepo = 'https://plugins.gradle.org/m2/' } repositories { maven { url springRepo } jcenter() mavenLocal() mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("se.transmode.gradle:gradle-docker:1.2") }} tasks.withType(JavaCompile) { options.encoding = 'UTF-8' }

上面有个坑要注意下, 仓库地址由原来的那啥地址换成了

https://plugins.gradle.org/m2/

因为原来的地中没有 docker 插件的依赖, 所以这里要注意下
2. 开始第二步, 在入口处的依赖(gradle.build)中引入对 docker 插件的设置, 什么叫入口处, 就是整个多模块项目主项目的入口, 我们目前的入口是 api 模块, 所以在 api 模块下的 gradle.build 写下配置文件

apply plugin: 'application' apply plugin: 'docker' jar { baseName 'spring-boot-gradle-for-docker' version '1.0' } distDocker { baseImage 'openjdk' maintainer 'harrison' } task dockerBuilder(type: Docker) { applicationName = jar.baseName tagVersion = jar.version volume('/tmp') addFile("${jar.baseName}-${jar.version}.jar", "app.jar") entryPoint(["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", 'app.jar']) exposePort(8081) doFirst { copy { from jar into stageDir } } }

什么意思? 这里的步骤少了像市面上的 Dockerfile, 我是很烦那个破文件, 放哪儿容易搞错, 这种就避免了这种尴尬问题
3. 至此配置就 ojbk 了! 我再上传修改过的两个文件一次, 先上主项目的 gradle.build 完整文件

def vJavaLang = '1.8' def bootProjects = [project(':api')] def gradleDir = "${rootProject.rootDir}/gradle" group = 'com.keppel' version = '0.0.1-SNAPSHOT' buildscript { ext { springBootVersion = '1.5.9.RELEASE' springRepo = 'https://plugins.gradle.org/m2/' } repositories { maven { url springRepo } jcenter() mavenLocal() mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("se.transmode.gradle:gradle-docker:1.2") } } tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } subprojects { apply plugin: "eclipse" apply plugin: "idea" apply plugin: 'java' targetCompatibility = vJavaLang sourceCompatibility = vJavaLang repositories { mavenLocal() jcenter() mavenCentral() } } configure(bootProjects) { apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'java' apply plugin: 'org.springframework.boot' targetCompatibility = vJavaLang sourceCompatibility = vJavaLang repositories { mavenLocal() jcenter() mavenCentral() } }

再上入口子模块的 gradle.build 文件完整版

jar { baseName = 'keppel-api' version = '0.0.1-SNAPSHOT' } springBoot { mainClass = 'com.keppel.ApiApplication' } dependencies { compile project(':common') compile project(':user') compile('io.jsonwebtoken:jjwt:0.9.0') compile('org.springframework.boot:spring-boot-starter-mobile') compile('org.springframework.boot:spring-boot-starter-security') compile("org.springframework.boot:spring-boot-starter-web") testCompile('org.springframework.boot:spring-boot-starter-test') } apply plugin: 'application' apply plugin: 'docker' jar { baseName 'spring-boot-gradle-for-docker' version '1.0' } distDocker { baseImage 'openjdk' maintainer 'harrison' } task dockerBuilder(type: Docker) { applicationName = jar.baseName tagVersion = jar.version volume('/tmp') addFile("${jar.baseName}-${jar.version}.jar", "app.jar") entryPoint(["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", 'app.jar']) exposePort(8081) doFirst { copy { from jar into stageDir } } }

如果你开发主机为 win 系列的你可以直接通过 idea 来进行 build
imagepng
双击命令就可以了
imagepng
镜像文件找不到在哪儿, 反正就是 api.tar 里面的吧
真正的是通过 Ubuntu 来进行打包, 贴个自己写的脚本, 亲测已经打包 docker 成功

// 进入项目目录 cd keppelfei // 拉取最新代码 git pull // 切换分支到主分支 git checkout master // 开始打包啦 ./gradlew clean build dockerBuilder --info // 停止正在运行的docker镜像进行替换 docker stop gradle-boot // 删除所有已停止的镜像 sudo docker rm $(sudo docker ps -a -q) // 导入打包好的镜像 docker images // 开始以gradle-boot为命名启动刚打好的镜像 docker run -d --name gradle-boot -p 8081:8081 keppel/spring-boot-gradle-for-docker:1.0

至此结束了, 有什么问题欢迎留言!

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    493 引用 • 928 回帖
  • Gradle
    41 引用 • 20 回帖 • 2 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    945 引用 • 1460 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 4 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖 • 1 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 4 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    31 引用 • 96 回帖
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    171 引用 • 414 回帖 • 377 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • sts
    2 引用 • 2 回帖 • 221 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 1 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 617 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 427 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    295 引用 • 749 回帖
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 50 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    132 引用 • 1115 回帖 • 122 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 1 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 487 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 604 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 408 回帖 • 486 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 365 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 146 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 75 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖 • 3 关注