通常基于java的项目一般使用tomcat等容器进行部署,而Springboot项目也是基于内置的一些容器来运行,如果要将SpringBoot项目运行于Docker或者kubernetes中,就不能仅仅打成war来进行部署,需要进一步将项目实现容器化,之后在运行在这些容器中。
运行环境:
操作系统:ubuntu18.04LTS
软件安装:jdk8+,nodejs,dockerversion18.09.0,docker-composeversion1.23.2
gradle4.10.2, idea
1.后端项目Docker化
本项目在IDEA环境中进行操作,采用gradle来管理项目依赖,首先添加docker插件:build.gradle->buildscript->dependencies添加gradle-docker插件:
classpath”se.transmode.gradle:gradle-docker:1.2″
应用插件:
applyplugin:’application’
applyplugin:’docker’
经过上面的配置之后可在 gradle -> [project] -> Tasks-> docker中看到默认的插件distDocker.
关于此插件的更多使用信息参考:https://github.com/Transmode/gradle-docker
构建自己的task脚本:
以上脚本经过gradle刷新之后需会在tasks里面生成名为buildDockerfile的插件,双击运行次插件可在build/docker/目录下生成dockerfile, 项目的war包,在项目文件下运行 build_image.sh 可以生成docker image, 并且会运行项目
build_image.sh脚本内容:
2.使用docker-compose 运行项目
docker-compose可以简单的编排docker镜像服务,在本项目中我们使用docker-compose创建容器,运行容器。
3. 使用kubernetes 来部署项目
项目的运行都是基于pod来实现,但是pod运行出现一些错误,或者挂掉,不会自动重启服务,所以来办都是用deployment来做,下面编写一个deployment的yml文件来使项目在kubernetes中跑起来。
前置条件:
1)项目容器化
2)镜像已经push到中央仓库
3)已经搭建好kubernetes集群
注意:在kubernetes集群每个node节点,master节点配置私服访问,因为不知道pod会具体存在于哪个节点上面,如果不做此配置,会出现镜像拉取错误。
deployments.yml:
创建deployment:
kubectl create -f <path_to_ samply-app-deployments.yaml>
查看创建pods和deployment:
kubectl get po # 查看pod
kubectl get deploy # 查看deployment
创建一个LoadBalancer类型的service,方便我们从kubernetes外部来访问服务:
services.yml:
创建服务:
kubectl create -f <path_to_ samply-app-services.yaml>
查看服务:
kubectl get svc #查看服务
通过loadBalancer的ip地址和端口号,就可以访问我们部署的服务了。