一、背景
公司需要提供Saas服务给客户经理通过企业微信进行获客展业,所以需要在企业微信上构建一套营销助手,用于客户经理推销自己的产品。
二、定制镜像
SpringBoot项目可以直接做成镜像,因为SpringBoot内置了一个tomcat,一些自定义的参数可以传给java -jar,在启动的时候加载这些自定义的参数【包括程序占用内存,指定编码等】
2.1 定制SpringBoot业务镜像
2.1.1 编写Dockerfile
- 拷贝项目编译好的jar包到centos7.6下的/opt目录
- 拷贝application.properties到jar包的同级目录,启动的时候会优先加载,方便修改
- 拷贝qwhosts文件到centos7.6下的/opt目录,拷贝checkAndStart.sh文件到centos7.6的/bin目录
- 启动checkAndStart.sh,接收运行参数$1和运行占用端口$2
] # vim Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 1FROM registry.moguyun.com/centos:7.6
2MAINTAINER lijun moguyun.com
3
4ENV JAR_FILE mogu-im-0.0.1-SNAPSHOT.jar
5ENV RUN_PORT 8080
6ENV RUN_OPTION "-server -Xms1g -Xmx4g -Xmn256m -Dfile.encoding=UTF-8"
7
8COPY $JAR_FILE /opt/app.jar
9COPY BOOT-INF/classes/application* /opt/
10COPY qwhosts /opt/
11COPY checkAndStart.sh /bin/
12
13WORKDIR /opt
14RUN cd /opt && mkdir logs && sh -c "touch /opt/app.jar"
15
16ENTRYPOINT ["sh","-c","/bin/checkAndStart.sh \"$RUN_OPTION\" \"$RUN_PORT\""]
17
2.1.2 编写qwhosts
- SpringBoot业务应用会用到MySQL,MongoDB,Redis数据库,在程序中已经定义好别名,在hosts中定义好了实际服务地址
- pinpoint-agent会用到pinpoint服务端别名,在hosts中也已经定义好服务端具体地址
] # vim qwhosts
1
2
3
4
5
6 110.10.8.8 jdbc.mg.addr
210.10.8.9 mongo.mg.addr
310.10.8.9 mongo.readonly.mg.addr
410.10.8.17 redis.mg.addr
510.10.8.10 pp.mg.addr
6
2.1.3 编写checkAndStart.sh
- 判断/opt/qwhosts是否存在,如果存在则追加记录到容器的/etc/hosts文件后面
- 通过java -jar 启动,接收运行时参数$1,运行时占用端口$2
] # vim checkAndStart.sh
1
2
3
4
5
6
7 1#!/bin/bash
2HOST_FILE=/opt/qwhosts
3if [ -f "$HOST_FILE" ]; then
4 cat $HOST_FILE >> /etc/hosts
5fi
6java $1 -jar app.jar --server.port=$2
7
2.1.4 编写制作推送镜像版本
-
把项目名称,项目分支,当前时间三个参数作为业务镜像的tag用来标识K8S线上环境的镜像唯一性,方便回滚和确认分支
-
通过docker build将当前目录下的Dockerfile打成镜像并通过docker push推动镜像到远程仓库供K8S线上环境使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1#!/bin/bash
2
3currentTime=`date "+%Y%m%d%H%M%S"`
4echo $currentTime
5projectName=$1
6branch=$2
7echo ${projectName}_${branch}_${currentTime}
8tag=${projectName}_${branch}_${currentTime}
9
10# docker build -t ccr.ccs.tencentyun.com/work-weixin/moguyun:${tag} . --no-cache
11docker build -t ccr.ccs.tencentyun.com/work-weixin/moguyun:${tag} .
12docker push ccr.ccs.tencentyun.com/work-weixin/moguyun:${tag}
13
14
三、运行镜像
3.1 创建Deployment
3.1.1 定义实例内的容器
- 选择已经做好的SpringBoot镜像和版本,勾选拉取策略【默认使用本地镜像,本地没有则拉取】
- 配置CPU/内存限制【Request是指预分配资源,Limit是容器资源限制,避免异常情况节点资源消耗太多】
- 自定义环境变量,可以修改RUN_PORT和RUN_OPTION作为变量传递给java -jar
创建Deployment部分截图
3.2 验证deployment
3.2.1 查看服务启动日志
- 查看日志可知服务已经跑起来了,说明SpringBoot镜像在生产K8S集群启动成功
至此:SpringBoot项目从镜像制作到服务启动已经全部完成。