SpringBoot | 第十四章:基于Docker的简单部署
前言
讲解了单元测试,本章节讲讲应用的部署吧。总体而言,在进行自动化部署时,基本都会用上
Jenkins
+Maven
+Docker
进行部署。本章节主要讲解使用Maven
+Docker
进行SpringBoot
应用的部署知识。
题外话:对于Docker
,本人也是去年才第一次听说的,当时也没有进行过相关了解。然后年初的时候,本着学习的心态,购置了一台阿里云的ECS服务器,之后的相关实践,都是在这台服务器上进行的。这周末要是不需要加班,可能会先出个Docker入门教程,因为还闲置了一台服务器,刚好可以把自己当作初学者,再重新来一遍,加深下印象,做下笔记。
- Docker
- 安装jdk8镜像
- maven插件推送方式
- 基于已有镜像,运行jar
- 总结
- 最后
- 老生常谈
Docker
关于Docker,百度百科是这么说的:Docker,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
题外话:本人觉得,每个开发者都应该了解下Docker
,毕竟我们不是专业的运维,如果一直在倒腾一些环境的安装,也是蛮枯燥乏味的。使用了Docker
可以减少很多的不必要,可以直接上手部署各式各样的环境了。真的很Nice呀!
安装jdk8镜像
安装命令为:
docker pull openjdk:8-jdk-alpine
安装成功后,查看镜像,表明已经安装成功了,当然也可先不安装,因为后续是基于此镜像进行编写Dockerfile的,所以这里先下载了。
大家可在:https://hub.docker.com/搜索,并选择自己想要的对应镜像文件。
maven插件推送方式
基于此方式时,是本地利用maven的docker插件进行编译,同时推送到远程的docker服务器中。所以事先需要远程的Docker
服务开启远程访问权限。本例演示的Docker版本为(docker -v 命令):
Docker version 1.13.1, build 774336d/1.13.1
这里说明下开启的方式(基于阿里云的Linux系统):
- 修改
/etc/docker/daemon.json
文件,加入hosts
配置即可。
如:
{"hosts":["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}
- 重新加载配置文件,并重启docker
systemctl daemon-reload
systemctl restart docker
3.验证,直接访问:
curl 127.0.0.1:2375/info
返回记录即可说明已经生效。
也可以直接浏览器访问:http://服务器IP:2375/info, 效果是一样的(这里隐去了阿里云服务器的地址)。
接下来正式开始编写示例。
0.创建一个web演示应用(这里大家可自行创建,或者直接下载本章节示例)
工程结构:
1.加入打包插件docker maven
的pom依赖。
<build><plugins><!-- springboot打包 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.9</version><configuration><!-- 镜像名称 --><imageName>lqdev.cn/demo</imageName><!-- docker远程服务器地址 --><dockerHost>http://服务器IP:2375</dockerHost><!-- Dockerfile文件存放目录 --><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins></build>
2.编写Dockerfile
,注意大小写,后面的file
是不大写开头的。
# Dockerfile
# 基于的镜像
FROM openjdk:8-jdk-alpineVOLUME /opt/tmpADD chapter-14-0.0.1-SNAPSHOT.jar app.jar# -Djava.security.egd=file:/dev/./urandom 可解决tomcat可能启动慢的问题
# 具体可查看:https://www.cnblogs.com/mightyvincent/p/7685310.html
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]# 对外端口
EXPOSE 8080
3.编码运行。
mvn clean package docker:build -Dmaven.test.skip=true
注意:这里若出现了编译异常,常见的就是500: HTTP 500 Internal Server Error
了。造成这种的情况一般是镜像名称不符合命名规范:限制为字母数字 [a-zA-Z0-9]
,和标点符号 [.-_]
,及/
和:
(":"一般上用来区分版本的,如lqdev.cn/demo:v1),或者Dockerfile
文件未找到之类的,若出错了大家可重点看下这两个地方。
网友反馈:有些环境会出现如下错误
Caused by: com.spotify.docker.client.exceptions.DockerException: manifest for openjdk:8-jdk-alphine not found
出现此错误时,可考虑换一个镜像,如jboss/base-jdk:8
(此镜像比较大,原来选择openjdk:8-jdk-alphine
也是出于大小考虑。),或者使用自制镜像。
4.查看远程镜像
docker images
5.运行镜像,查看应用是否正常启动。
docker run -d -p 8080:8080 lqdev.cn/my-springboot-images
查看日志或者直接浏览器访问:http:服务器地址:8080/,即可。
有返回预期的数据,部署成功!
基于已有镜像,运行jar
基于有时候没有开启远程服务,也可把jar上传至服务器,然后编写脚本进行运行,这里简单示例下,正常部署时,正常是通过
jenkins
打包,然后编写打包后事件,运行脚本即可。
编写运行镜像脚本:
docker run -d -p 1234:8080 -v /opt/docker/chapter-14-0.0.1-SNAPSHOT.jar:/usr/chapter-14-0.0.1-SNAPSHOT.jar --name SpringbootByJar openjdk:8-jdk-alpine java -jar /usr/chapter-14-0.0.1-SNAPSHOT.jar
其实就是把jar拷贝从宿主中拷贝到容器中,然后运行java命令进行启动。和原来的运行jar方式是一样的。
运行后访问:http://服务器地址:1234 即可查看效果,验证是否部署成功了。
总结
本章节主要是讲解了利用
Maven
的Docker
打包工具进行应用构建同时推送到远程仓库及已有jar
的情况下,直接在容器中运行jar。其实原理都是一样的,都是把jar放入到容器中,然后利用java
命令进行运行应用。本章节,若是对docker不熟悉可能会有点懵,因为好多命令都没有具体说明,(┬_┬),大家可查阅相关资料,对Docker
有了解后在进行尝试。周末看看,有时间会写几章关乎Docker
入门及基本使用的教程的,当然这些教程都是个人见解了,但至少应该能让新手有个了解~
最后
目前互联网上很多大佬都有
SpringBoot
系列教程,如有雷同,请多多包涵了。本文是作者在电脑前一字一句敲的,每一步都是实践的。若文中有所错误之处,还望提出,谢谢。
老生常谈
- 个人QQ:
499452441
- 微信公众号:
lqdevOps
个人博客:http://blog.lqdev.cn
原文地址:http://blog.lqdev.cn/2018/07/27/springboot/chapter-fourteen/
完整示例:chapter-14
转载于:https://www.cnblogs.com/okong/p/springboot-fourteen.html
SpringBoot | 第十四章:基于Docker的简单部署相关推荐
- fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...
1)实验平台:正点原子开拓者FPGA 开发板 2)摘自<开拓者FPGA开发指南>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载地址:http://www.o ...
- 系统架构师学习笔记_第十四章_连载
第十四章 基于ODP的架构师实践 14.1 基于ODP的架构开发过程 系统架构 反映了功能在系统系统构件中的 分布.基础设施相关技术.架构设计模式 等,它包含了架构的 原则 和 方法.构件关系 与 ...
- 第十四章 Linux核心资源
Table of Contents, Show Frames, No Frames 第十四章 Linux核心资源 本章主要描叙寻找某个特殊核心函数时用到的Linux核心资源. 本书并不要求读者具有C编 ...
- [转]Windows Shell 编程 第十四章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988010】...
第十四章 设计Shell集成应用 有一些工具可以使应用程序更紧密地与Shell和底层系统进行集成.也就是说,用户可以象处理系统文档和程序那样处理你的文档和程序.例如,右击文件来显示可用功能列表等.Wi ...
- DockOne微信分享(八十四):Docker在B站的实施之路
本文讲的是DockOne微信分享(八十四):Docker在B站的实施之路[编者的话]B站一直在关注Docker的发展,去年成功在核心SLB(Tengine)集群上实施了Docker.今年我们对比了各种 ...
- Gradle 1.12用户指南翻译——第五十四章. 构建原生二进制文件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- 《深入理解 Spring Cloud 与微服务构建》第十四章 服务链路追踪 Spring Cloud Sleuth
<深入理解 Spring Cloud 与微服务构建>第十四章 服务链路追踪 Spring Cloud Sleuth 文章目录 <深入理解 Spring Cloud 与微服务构建> ...
- 【JAVA SE】第十四章 集合框架、语法糖和泛型
第十四章 集合框架.语法糖和泛型 文章目录 第十四章 集合框架.语法糖和泛型 一.集合框架 1.概念 2.接口 二.语法糖 1.概念 2.解语法糖 三.泛型 1.概念 2.泛型类 3.泛型接口 4.泛 ...
- 数据结构思维 第十四章 持久化
第十四章 持久化 原文:Chapter 14 Persistence 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在接下来的几个练习中,我们将返回到网页搜索引擎的构建.为了回 ...
最新文章
- 数据库实验:数据库和表、查询、视图与安全性、存储过程及游标、触发器、综合实验-水果商店进阶
- 进行将多张CAD图纸转换成高清WMF格式的操作是什么?
- linux退出远程登录命令,【linux命令】Linux 如何查看和关闭 ssh pts/n 远程登录用户...
- git clone 一些简单笔记
- 机器学习理论《统计学习方法》学习笔记:第二章 感知机
- OpenCV OMZ MTCNN人脸检测的实例(附完整代码)
- tableview的reloadData 产生的问题
- Oracle存储过程--案例
- 正则表达式验证六位数以上数字,符号,字母任意两种混合的密码验证策略
- Java技术依然备受追捧,主要学习内容有哪些?
- js与html编码不同,js与html中unicode编码的使用
- 如何使用利用LaTeX制作个人简历
- set+线段树 Codeforces Round #305 (Div. 2) D. Mike and Feet
- 计算机云处理器,IBM推出最新量子处理器 等于6.5万比特普通计算机
- 【Python】接收UDP数据(保姆级图文+附测试工具文件+api例程)
- 基于Vue2.0的音乐播放器——歌手模块(拿不到数据)
- 按哪个键进入BIOS设置
- 1813 句子相似性 III
- CRUD是什么意思?
- 一文看尽中国互动直播行业——低俗无聊?那是现状,不是未来
热门文章
- python list中append()与extend()用法
- diy 扫地机器人 滚刷_扫地机器人无法完成的使命,莱克吉米W7智能洗地机帮你完成...
- 服务器中anaconda如何修改环境变量,手动添加anaconda3到环境变量中的方法
- mysql字段为空 不作为查询条件_Mysql基本语法知识点小结
- java书籍_Java学习必备书籍(快来收藏)
- 我的YUV播放器MFC小笔记:添加删除自定义分辨率
- python scheduler 定时执行_python使用apscheduler做定时任务的管理
- 【java】java 新一代垃圾回收器ZGC的探索与实践
- 【Elastischearch】7.6 版本 update 后 refresh 慢,性能问题导致稳定性问题
- 【Elasticsearch】Elasticsearch 最佳实践系列之分片恢复并发故障