很多小伙伴在生产环境中部署SpringBoot都是通过打包成jar包一键运行,或者达成war包放在Tomcat下运行,而容器化部署应当是目前最主流的方案;

不同于传统的单体应用,微服务由于服务数量众多,在部署的时候出现问题的可能性更大,这时候,使用docker来部署,就能很好地解决这个问题,这也是目前使用较多的方案之一;

今天,笔者会聊一聊如何将SpringBoot项目一键打包到远程docker容器中,然后通过运行镜像的方式启动一个SpringBoot项目;

参考链接:https://mp.weixin.qq.com/s/vSCQLvQBYMYoPhdlO2v3XA

一、准备环境

  • Windows10

    • IDEA2019
    • JDK1.8
    • Maven 3.6.0
  • CentOS 7
    • Docker版本:1.13.1

二、准备工作

1.准备docker

首先要在CentOS 7上安装好Docker,读者可以结合网上教程及下列命令进行安装

1.检查内核版本,必须是3.10及以上
uname -r
2.安装docker
yum install docker
3.输入y确认安装
4.启动docker
systemctl start docker
docker -v(查看docker版本)
Docker version 1.13.1, build 7f2769b/1.13.1
5.设置docker为开机启动
[root@izwz91p7ptv6xnhkarxg4nz admin]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
6.停止docker
systemctl stop docker

Docker安装完成后,我们首先要修改Docker配置,开启允许远程访问Docker的功能,方式如下:

打开/usr/lib/systemd/system/docker.service文件,加入以下内容
-H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

如下图所示

配置完成后,保存退出,重启docker,命令如下

systemctl daemon-reload
service docker restart

2.准备IDEA环境

IDEA上的准备工作,主要是安装Docker插件,点击

File->Settings->Plugins->在搜索框中查找Docker

如下(这里我已经安装完成,安装完成后需要重启IDEA)

重启完成后,需要配置Docker的远程连接地址,打开

File->Settings->Build,Execution->Deployment->Docker

3.准备项目

这一过程很简单,创建一个Spring Boot项目,引入web模块,创建成功后,再创建一个控制器HelloDockerController

@RestController
public class HelloDockerController {@GetMapping("/hello")public String hello(){return "hello docker!";}
}

4.准备Dockerfile

在根目录下创建一个Dockerfile,目录如下

内容如下

FROM hub.c.163.com/library/java:latest
VOLUME /tmp
ADD target/springboot-docker-demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

注意:

  • 考虑到Docker下载镜像较慢,这里使用网易提供的Docker镜像
  • 由于Spring Boot运行时需要tmp目录,这里创建一个/tmp目录出来
  • 将本地target目录中打包好的jar文件复制一份到/app.jar
  • 最后一行配置启动命令,由于我打包好的jar已经成为app.jar,所以启动命令也是启动app.jar

可能出现的错误

这里需要注意第三行,springboot-docker-demo-0.0.1-SNAPSHOT是和pom.xml文件中的项目版本信息一致的

<artifactId>springboot-docker-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>

如果不一致会报错

5.配置Maven插件

<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.0</version><executions>   <execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><!--配置主机地址,即linux服务器的地址--><dockerHost>http://120.77.210.227:2375</dockerHost><imageName>javaboy/${project.artifactId}</imageName><imageTags><imageTag>${project.version}</imageTag></imageTags><forceTags>true</forceTags><dockerDirectory>${project.basedir}</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration>
</plugin>

三、打包运行及测试

1.打包

首先要关闭Windows的防火墙,不然在接下来打包的过程中会报错;

然后对项目进行打包,项目会自动生成一个镜像,并上传到Docker容器中,打包方式如下

打包过程较慢,部分打包日志如下

Step 1/4 : FROM hub.c.163.com/library/java:latest---> a001fc27db5a
Step 2/4 : VOLUME /tmp---> Using cache---> f2cf1c73372f
Step 3/4 : ADD target/springboot-docker-demo-0.0.1-SNAPSHOT.jar app.jar---> bfb46e17160a
Removing intermediate container 4e9c620b22a3
Step 4/4 : ENTRYPOINT java -jar /app.jar---> Running in 1602ae202c61---> 7b7d907699d0
Removing intermediate container 1602ae202c61
Successfully built 7b7d907699d0
[INFO] Built javaboy/springboot-docker-demo
[INFO] Tagging javaboy/springboot-docker-demo with 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  56.893 s
[INFO] Finished at: 2019-10-04T09:27:49+08:00
[INFO] ------------------------------------------------------------------------Process finished with exit code 0

打包成功后,可以在docker容器中看到上传的镜像

2.运行测试

2.1方法一

在linux服务器上创建一个该镜像的容器

docker run -d --name javaboy -p 8080:8080 javaboy/springboot-docker-demo:0.0.1-SNAPSHOT

注意:需要开放8080端口

启动之后即可访问容器中的端口了

2.2方式二

注意,打包完成后,IDEA中多了一个Docker选项,如下:

然后右键点击镜像,创建容器

暴露的端口使用Specify即可

2.3测试

一键部署SpringBoot到远程Docker容器相关推荐

  1. IDEA一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据我了解,容器化部署应该是目前的主流方案. 微服务不同 ...

  2. 提升10倍生产力:IDEA远程一键部署SpringBoot到Docker

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 IDEA是Java开发利器,springboot是Java生态中最 ...

  3. Java 开发提升十倍生产力:idea 远程一键部署 springboot 到 Docker

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~ 作者:陶章好 链接:https://juej ...

  4. docker php 一键部署_Java开发提升十倍生产力:Idea远程一键部署springboot到Docker

    IDEA是Java开发利器,springboot是Java生态中最流行的微服务框架,docker是时下最火的容器技术,那么它们结合在一起会产生什么化学反应呢? 一.开发前准备 1.Docker安装 可 ...

  5. 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  6. 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  7. docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  8. IDEA配置Docker一键部署SpringBoot项目(企业级做法)

    Docker一键部署SpringBoot项目 前言 一.开启Linux的Docker远程访问 1.1 安装vim工具: 1.2 修改`daemon.json`的配置: 1.3 加入配置: 1.4 重新 ...

  9. 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目

    日常开发项目的过程中,我们每次需要部署线上的时候,都需要安装一大堆的运行环境,例如:JDK.MySQL.Redis 等,非常花费时间.我们可以使用 Docker 的容器技术,方便快捷地搭建项目启动所需 ...

最新文章

  1. 网站设计流程图(来源于网络)
  2. 在 Lua 里 使用 Cocos Studio 导出的 .csb 文件
  3. 正则匹配没有闭合标签_RegExRX for Mac(多功能正则表达式开发工具)
  4. python加密与解密_Python加密与解密,pythonCrypt,和
  5. oracle的基本概念,oracle的基本概念
  6. NHibernate源码分析开篇
  7. windows查看linux文件工具,「实用工具」介绍几款Windows系统与Linux服务器传递文件的工具...
  8. 2 Advanced Read/Write Splitting with PHP’s MySQLnd
  9. java字段映射成其他字段名称_java字段与数据库字段映射
  10. 极化SAR图像特征提取与分类方法研究
  11. LOTO 示波器 两种电流探头的对比实测
  12. 微信公众号的搭建-第二天-申请公众号并与本地测试服务器绑定
  13. Podfile语法参考(译)
  14. matplotlib:图形绘制常用增加修饰和设置参数
  15. 扣图神器, 用Python 5行代码解决
  16. 【精品】防止表单重复提交 方法汇总
  17. shell softech 面料_户外软壳面料及各品牌的技术
  18. 单片机c语言p1口转弯灯实验,单片机p1口转弯灯实验程序
  19. 实现所有网站的qq登录返回登录后的cookie信息
  20. ​万字长文详解文本抽取:从算法理论到实践(附“达观杯”官方baseline实现解析及答疑)...

热门文章

  1. Hive的HQL语句及数据倾斜解决方案
  2. 7、em/px/rem/vh/vw区别?
  3. 【真人手势动画制作软件】万彩手影大师教程 | 去除水印
  4. Android开发 BaseExpandableListAdapter的使用
  5. NetLogo 初步认识
  6. 视频自动播放代码(优酷、搜狐、酷6、土豆等)
  7. Bzoj4826 [Hnoi2017]影魔
  8. [CSP-S模拟测试]:影魔(树状数组+线段树合并)
  9. 震惊!TYPE-C 转OTG(USB2.0传输数据)+PD充电协议芯片
  10. LibGDX_1.1: LibGDX 跨平台游戏开发框架简介