dockerspringboot(dockerspringboot开发环境)
本篇文章给大家谈谈dockerspringboot,以及dockerspringboot开发环境对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、解决SpringBoot在Docker运行注册IP不正确的问题
- 2、docker安装ELK 收集springboot日志(方法1)
- 3、SpringBoot+Docker项目打包(jar)和部署
- 4、微服务架构实践 - 你只懂docker与spring boot就够了吗?
- 5、Linux Centos7环境下Docker搭建并运行SpringBoot的jar包
解决SpringBoot在Docker运行注册IP不正确的问题
在开发中经常会碰到SpringBoot应用在启动成功以后,发现注册到注册中心的IP不是自己想要的。实际开发联调的时候也经常碰到自己本地启动应用怎么获取到一个怪怪的IP,通过别的机器无法连接到这个IP。发现有虚拟机的时候,就把虚拟机网卡停掉,然后才能获取本地局域网IP。当然也可以每个服务都指定IP的方式来解决这个问题,只有几个实例还可以,但是有几十或者上百个实例如何解决呢?
出现这种问题的原因是当前机器有多个网卡(如有虚拟网卡)造成的,SpringBoot在获取IP的时候无法获取到正确的IP,在实际生产环境中服务器本身也有多块网卡,SpringBoot启动时只能选择一个IP,能否通过简单的配置就能解决这个问题呢?答案是,可以的,SpringBoot本身自带这种功能。
SpringBoot提供了三种配置方式,可以单独使用,也可以混合使用。
使用Docker中运行SpringBoot服务时,服务注册的时候,可以忽略掉一些指定名称的网络接口,想要吵改忽略的网络接口的名称可以使用正则表达式来配置。下面的配置就是忽略名称为docker0网络接口和所有名称以veth开头余拿的网络接口:
相反,也可竖碰搭以使用正则表达式配置只使用指定的网络接口地址,下面配置的例子就只使用192.168开头和10.0开头的ip地址,其他的地址都不会使用。
如果SpringBoot服务只是在局域网内使用,不会被外部调用的话,就可以使用site-local方式配置,配置方式如下:
docker安装ELK 收集springboot日志(方法1)
1 、 logstash中安装json_lines插件并重启logstash
2、在SpringBoot项目pom.xml文件中添加logstash-logback-encoder依赖
3、logback.xml文件添好纯加配置,让logback的日志樱核输出友颂咐到logstash
4、启动springboot应用
5、使用 kibana 查看日志信息
[img]SpringBoot+Docker项目打包(jar)和部署
一、打包SpringBoot项目
1.检查pom文件是否有maven打包插件
2.选择IDEA右侧Maven,点击install(如果配置了maven的环境变量,则可以在控制台输入:mvn install 命令,同样可以打包jar包)镇中姿
等待maven打包,当控制台出现下列日志时表示打包成功
如下图所示,打包完会出现一个.jar文件,即打包好的jar包。
3.在控制台输入:java -jar /Users/heyou/Desktop/springboot-0.0.1-SNAPSHOT.jar 来检查jar包是否可以正常运行。
二、Docker部署jar包
前提条件:
1.构建Dockerfile
在已经打包好的jar包的同级目录下新建Dockerfile
Mac 可在IDEA控制台输入vim Dockerfile 进入vim编辑,输入:
其中:
FROM 命令指定运行环境和版本
VOLUME:一个特别指定的目录,用于存储数据,该命令的作用是在/var/lib/docker创建一个名为tmp的目录,在开启redis服务时,需要特别指定redis的数据存储在哪个文件夹,此时这个命令就十分有用
ADD:拷贝文件并且重命名(需要输入两个参数:即jar包名称和重命名后的名称)
ENTRYPOINT:容器启动时运行的命御绝令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
2.创建docker文件夹,将jar包与Dockerfile移动到该文件夹,进入该文件夹,运行命令:
此时会将该项目构建成一个image(镜像),运行命令:
3.运行镜像:
注:“:”左边的端口号是暴露给外部访问的端口,而右边端口是docker内部培孝镜像运行的端口
4.打开浏览器访问部署的项目地址,检查项目是否运行正常
微服务架构实践 - 你只懂docker与spring boot就够了吗?
背景
随着公司一年多的成长,我们已经开发了数十个项目了,后台有JAVA的有PHP的,为了更好地提升开发与管理效率,各技术大牛小牛们时常进行激烈的PK,碰撞出了许许多多爱的火花,比如其中之一:微服务实践
设计
只需要有一套BASE微服务,BASE微服务生成业务系统微服务实例,供各个业务系统调用;业务系统不直接调用BASE,只能调用微服务INSTANCE。
这是运维的问题,让运维去解决,运维使用工具,实际也芹橘不算困难,反正执行的都是脚本,不需要手工操作。
单点故障影响全局,我们选择了稳定更重要;另外saas的话,为了应对不同行业,会存在过度设计的嫌疑;私有化更容易。
调用逻辑
设计理念
非模块化,谈不上微服务,比如我们上面的用户微服务、产品微服务、地址微服务等,都需要先模块化,为了更好地落实开发,你可能不得不,边模块化边微服务,模块化的时候要注意,不能有关联查询,包要完全独立,到时候微服务才能拆开。
松耦合表示我们模块之间不直接依赖,无状态,可以单独地为外界提供服务;
强内聚是指,我们虽然要拆分成一个个小的微服务,但是也要考虑某些功能的强关联性,比如一个凳子是由四个脚与一个板组成,我们不能把四个脚与板分开售卖,就没有意义了。
开发
spring-boot :较springmvc更加简约了,springmvc有一大零的配置文件,比如spring-servlet、spring-mybatis、spring.xml与web.xml,这些在spring-boot都不需要了,只需要强大的注解功能即可,boot更合适微服务。
spring-cloud :里面有比较多组件,用于支持微服务,比如spring cloud config统一配置中心,用于多环境的配置文件配置,大家再也不用为空和多个微服务的开发、测试与生产环境的配置文件管理而发愁了;spring cloud eureka用于服务注册与发现,下面有单独介绍;其它的组件大家可以去官网看看,这里不一一介绍,总之如果JAVA平台,尽量使用spring体系的内容。
我们采用mysql,因为我们是应用多,但数据量单表并不算大,多则不超过百万,mongodb也实验过,开发非常快,也非常灵活,但因为不是关系型数据库,维护成本较高。
RESTFUL :URL的资源与操作解耦,让URL更加符合语义,上百个接口也非常好管理,网上有很多文章讲得非常透彻,这玩意不是特别好理解,要多领悟,在项目中实践,就有矛塞盾开的感觉,这里不做详细介绍。
接口文档swagger :比起传统全手工写接口文档,swagger有统一的输出格式,不管是几个人写的;swagger采用写代码的方式来写接口文档,以前修改了代码,还必须打开wiki手工修改接口文档,现在只需要修改一下代码即可,程序员更愿意修改了,成本更低了,前端与其它调用者不会天天吼着,你这接口咋又变了,新加的字段是啥意思呀。
RocketMQ:一直纠结kafka与rocketMQ,最终选择了RocketMQ
为了性能上面的考虑,尽量使用异步编程,比如注册送优惠券,那么注册成功就斗首盯可以给用户返回注册成功了,但是送优惠券可以是异步调用的,不阻塞注册的线程。
微服务框架下,日志不可能还分散在各个服务节点上,必须有统一的日志中心。ELK是一个实时日志分析平台,就是将各个服务的日志汇总于日志中心,然后可以按照系统、节点等进行搜索,除上述搜索条件外,我们还在各个微服务实现了按照业务id(一次请求生成一个业务id)与用户id搜索日志,方便跟踪与定位问题。
当然可能有更加轻量级与好用的disconf或spring cloud config,但是我们有php开发的应用,以上二者都不支持。如果全是JAVA应用,采用disconf还是非常不错的。
测试
每个程序员都有这样的经历,刚上线,客户又反馈了bug,原来是我们修改某个功能代码的时候,导致了其它功能的bug,每次上线心里都没底;这就体现了接口测试的必须性,尤其是每次版本升级的时候,都需要执行一遍,以防修改某个接口导致其它接口报错,比手动测试靠谱许多。
部署
docker已经家喻户晓了,这是继虚拟机以后,又一重大变革,将所有的单个微服务都放在docker中,这样你何时何地想部署,直接丢过去就OK了,快到爆。
用几句简单的命令就搞定了负载均衡,而且还可以平滑升级,版本升级的时候,大家就不用告诉客户:系统通知,某日某晚00:00-08:00我行处于系统升级维护中,大家不要去取钱哦,因为你可能取不出来,呵呵。
升级
我们采用工具flyway,可以对数据库脚本进行版本控制。
传统的版本升级,
1.开发推代码并同时记录自己提交了哪些文件;
2.项目经理根据svn审核文件,并打包成war包;
3.投到测试环境让测试公司测试;
4.中途修改了文件,可能需要重新打包;
….
我都写不下去了,项目经理像个超人似的。
现在用持续集成(CI)非常简单,我们用的工具是Jenkins,推完代码,点几下按钮就完成了上线,不管是测试环境,还是生产环境都非常简单,不然项目经理核对文件眼睛都绿了。
结尾
本文主要是介绍微服务开发上的选型,对于细则不做深究,大家感兴趣可以了解下各个组件。当然,我们的选型未免正确,不同场景应用可能完全不同,本文仅供参考。
Linux Centos7环境下Docker搭建并运行SpringBoot的jar包
1、使用maven工具生成jar包;
先点击clean,再点击packages
2、使用文件传输工具将jar包上传到服务器的拆昌岁目录下(如:/usr/local/pr)
本地的jar包路径在项目路径下的target目录下,如renren-fast.jar
同时新建一个Dockerfile文件,文件内容如下:
EXPOSE 对应项目的端口号
3、创建docker镜像
docker build -t renren .
docker images --查看镜像
4、启动镜像
docker run -d -p 8888:8888 renren
(一)报错:
WARNING: IPv4 forwarding is disabled. Networking will not work.
解旅睁决方式:
vi /etc/sysctl.conf
其中添加一行:
net.ipv4.ip_forward = 1
保存退出后,重启网络
systemctl restart network
(二)报错
docker: Error response from daemon: driver failed programming external connectivity on endpoint mystifying_tesla
解决方式
重启docker
systemctl restart docker
重新加迅蔽载镜像
docker run -d -p 8888:8888 renren
5、网页输入一个接口,查看返回情况
关于dockerspringboot和dockerspringboot开发环境的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。