Docker swarm部署spring boot服务

原先部署单体式应用是把服务打成jar包放到服务器,通过shell脚本启停服务。对于微服务来说,这种部署方案十分繁琐。因为服务很多,每个服务都不止一个副本,并且服务部署在不同的机器。如果系统换版,光启停服务都需要一段时间。可以通过jenkins这种CI/CD工具帮助快速部署服务,但是生产环境可能不允许部署这种工具。对于微服务来说,需要动态扩缩容,版本回滚,服务上下线,故障自动转移,传统的部署方案已经不再适用。使用docker swarm可以帮助我们快速搭建微服务

使用docker的部署方案:
整体流程图:
image.png

Boot项目使用dockerfile-maven-plugin插件,会在maven deploy的同时,把代码打到镜像内并推送到仓库中。Dockerfile在本地配置,随代码一同推送至gitlab,jenkins自动化地完成从gitlab拉取代码-构建镜像-推送镜像至harbor-到目标服务器部署服务的操作。服务的部署即docker stack –c docker-compose.yml app。Docker会根据docker-compose.yml的配置从镜像仓库拉取镜像并启用容器。

应用:使用dockerfile-maven-plugin的maven插件和编写dockerfile。代码在gitlab保存,jenkins构建时会使用该插件根据dockerfile的配置将服务打成镜像推送到镜像仓库。

基础环境:

  • Docker环境:只有部署了docker基础环境,才能运行镜像,需指定镜像仓库,安装portainer-agent。
  • 搭建docker-swarm集群:微服务运行的机器环境
  • 创建overlay网络:应用运行的网络环境,网络内的容器可以相互通讯。
  • Harbor:docker镜像仓库,相当于gitlab,docker从harbor拉取镜像部署容器
  • Portainer:监控docker容器信息
  • 编写docker-compose.yml文件:定制微服务,即需要部署哪些服务,服务的镜像来源,服务的部署方式,副本数,健康检查方式等。

生产环境:互联网环境拉取镜像,docker save拉取到本地,拷至生产环境再docker load,docker tag至生产环境的harbor,再用docker-compose部署。如果构建的镜像太大,可以在本地把服务打成jar包,到生产机器构建镜像并推送到harbor。

和手动部署并启用服务相比,即在一台一台机器启动tomcat或java -jar,swarm解决了什么问题:

  • 一键部署。
  • 动态扩容缩容。如果流量大了,可以很快加副本。
  • 故障转移。如果某台机器挂掉,服务会转移到健康的机器
  • 可分配cpu,内存,硬盘空间等资源
  • 判断服务是否启动成功
阅读 227

推荐阅读
java开发
用户专栏

记录java学习与总结

0 人关注
13 篇文章
专栏主页