简介:Springboot使你可以非常容器的创建一个独立的、生产级的、基于spring的应用。它大量简化了使用spring带来的繁琐的配置,大部分基于SpringBoot的应用只需要一点点的配置
特征:
独立的spring应用(内置tomcat、jetty,无需部署war包)
提供 丰富的"starter"依赖,简化应用构建配置
自动配置spring和第三方依赖库
没有代码生成,没有xml配置
提供准生成功能,如指标,健康检查和外部配置
访问官网:https://start.spring.io/
项目介绍:该项目是使用Springboot框架开发的简单的考勤签到系统,依赖MySql数据库记录数据,能够实现注册、登陆、签到、修改个人信息,查看签到记录等功能
源码地址:考勤签到Springboot项目
1、该项目基于Java的Springboot框架开发,所以基础镜像使用 openjdk镜像
docker pull openjdk:8-jre-alpine2、使用mvn将该项目打包成jar包,需提前在服务器配置好Java和maven的环境
mvn package在target/下会生成hhu-dbexam-0.0.1-SNAPSHOT.jar的文件,可以先在本地测试一下
java -jar hhu-dbexam-0.0.1-SNAPSHOT.jar3、使用Dockerfile构建docker,推送到我们的阿里云镜像仓库
$ cat Dockerfile FROM openjdk:8-jre-alpine COPY target/hhu-dbexam-0.0.1-SNAPSHOT.jar /hhu-dbexam-0.0.1-SNAPSHOT.jar ENTRYPOINT ["java","-jar","/hhu-dbexam-0.0.1-SNAPSHOT.jar"] $ docker build -t springboot-web:v1 .这里也是使用Pod进行部署,但未做数据持久化,下面是mysql-rc.yaml部署文件内容
--- apiVersion: v1 kind: ReplicationController metadata: name: mysql spec: replicas: 1 selector: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: hub.c.163.com/library/mysql ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: "123456" --- apiVersion: v1 kind: Service metadata: name: msyql-service labels: app: nginx spec: ports: - port: 3306 targetPort: 3306 selector: app: mysql type: NodePort修改代码中链接信息,使其能够连接数据库,url也要对应进行修改
创建对应的数据库和表,添加数据库字段
学生信息表的设计如下:
列名数据类型长度主键是否非空idint10yesyesstunoint20noyesnamevarchar30noyespasswordvarchar20noyesclassidvarchar20nonoemailvarchar20nonophonevarchar30nono学生信息表的字段格式说明如下:
序号学号姓名密码班级邮箱电话011706010302测试123556计算机六班12321@qq.com1525252考勤记录表的设计如下:
列名数据类型长度主键是否为空idinr10yesyesstunovarchar20noyesnamevarchar30noyespuch_intimrdatetimenoyes考勤记录表的字段格式说明如下:
序号学号姓名签到时间011706010302测试2020-04-29 09:27:17下面是数据库导出的hhu_dbexam.sql文件
/* Navicat MySQL Data Transfer Source Server : 10.139.8.42 Source Server Version : 50718 Source Host : 10.139.8.42:31645 Source Database : hhu_dbexam Target Server Type : MYSQL Target Server Version : 50718 File Encoding : 65001 Date: 2020-07-04 15:28:28 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for punch_in -- ---------------------------- DROP TABLE IF EXISTS `punch_in`; CREATE TABLE `punch_in` ( `id` int(10) NOT NULL AUTO_INCREMENT, `stuno` varchar(20) NOT NULL, `name` varchar(30) NOT NULL, `puch_intimr` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of punch_in -- ---------------------------- -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(10) NOT NULL AUTO_INCREMENT, `stuno` int(20) NOT NULL, `name` varchar(30) NOT NULL, `password` varchar(20) NOT NULL, `classid` varchar(20) DEFAULT NULL, `email` varchar(20) DEFAULT NULL, `phone` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES ('2', '1111111', '李四', '123123', '1111', '11111@qq.com', '17688903066'); INSERT INTO `student` VALUES ('3', '123456', '李四', '123', '计算机1班', '888888@qq.com', '15971488899'); INSERT INTO `student` VALUES ('4', '111111', '王五', '123', '计算机2班', '1111@11.com', '18788899999');这个项目我们需要使用web界面进行访问,我们使用deploment创建Pod,需要使用NodePort进行暴露或者Ingress域名访问服务
下面是springboot-web.yaml部署文件内容
--- apiVersion: apps/v1 kind: Deployment metadata: name: springboot-web spec: selector: matchLabels: app: springboot-web replicas: 1 template: metadata: labels: app: springboot-web spec: containers: - name: springboot-web image: registry.cn-hangzhou.aliyuncs.com/other_ns/springboot-web:v1 ports: - containerPort: 8080 --- #service apiVersion: v1 kind: Service metadata: name: springboot-web spec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: springboot-web type: NodePort部署上述文件后查看pod和service是否正常运行
[root@master-dev HHUDBExam]# kubectl get po |grep springboot springboot-web-67f69d94f5-59wjh 1/1 Running 0 53s [root@master-dev HHUDBExam]# kubectl get svc | grep springboot-web springboot-web NodePort 10.110.69.65 <none> 80:31706/TCP 59s我们访问 http://ip:31706访问我们的服务
至此,我们一个Springboot项目就完成在k8s上面的部署,总结一下流程,先找到基础镜像,在搞定运行的文件,然后将文件打包到镜像里面,最后在k8s上确定调度策略,部署服务。