1绪论
1.1课题研究背景与意义
1.1.1课题的背景
使用Docker的原因:
1、首先docker很实在的一个应用便是开发工具直接通过安装一个docker就可以了,不必再繁复的来搞环境的问题了。这样针对于新人乃至开发人员来说直接分析业务上手代码就好了,节省了时间提高了开发的效率;
2、可移植性,docker的兼容性很好。比如后台所使用的是centOS前端同事使用的是Ubuntu,这样在进行调试项目或上线部署项目的时候就可能产生兼容性问题,而将项目由docker打包部署就可以避免这个问题。为什么这么说呢?docker就相当于一个平台,我们所打包的项目便相当于上面的一个个物件,这样物件在一个统一的平台上便不会产生这样的问题了;
3、与自动化技术相结合,实现程序的自动化。就好比我们的服务器架构突然有一台机器宕机了。docker会通过实时的一个检测,将这种情况进行处理,将这个服务器的所负责的工作任务嫁接转移到另一个平台上,然后给我们发起通知进行修复;
4、减少基础设施的开支,将项目分模块,进行微服务开发应用。最基础的前后端所应用的环境不一样我们需要分别部署不同的环境,但是我们在docker这里我们可以直接将其部署到docker上,然后对这两端进行搭配就好了(也就是一个代码库多重部署)这样在很大程度上就节省了开支;
5、固有的安全性,具有“隔离”的特性将程序中不安全的内容进行隔离,这样集装箱化的环境有助于减少攻击面。
2相关技术简介
2.1 关键技术介绍
2.1.1 JSP
JSP的原型是 Servlet[3-4]。Jsp简单的说就是含有java代码的html[5-7],在html中嵌入部分java代码使得静态的html页面获得动态的数据,从而实现动态页面。其基本的工作原理服务器再前端页面中被请求后对页面中的java代码进行处理,然后把生成的网页返回给客户端从而达到一个数据与页面的完美结合。JSP的工作原理如图2-1所示:
图0–1 JSP工作原理图
2.1.2 Spring
2.1.3 SpringMVC
springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。
springmvc是一个基于mvc的web框架。
如图 2-2 SpringMVC处理流程所示:
图 2-2 SpringMVC处理流程
2.1.4 Mybatis
Mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动
设置参数以及获取结果集。Mybatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Oldjava Objects,普通的Java对象)映射成数据库中的记录。
执行流程如图 3所示:
图 3
2.1.5 JQuery
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
jQuery 的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制 和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。
2.2开发工具
Spring Tool Suit是一个开源的开发工具,其体积小功能大,深受开发者的喜爱[11]。在Spring Tool Suit中开发javaEE,方便快捷。在Spring Tool Suit的第一个主页面,左侧边框有一个工作区,在工作区内存放开发人员的资源,其独特的结构展示,让程序员在繁杂的目录中可以快速定位到方法的位置。结合本次研究课题的开发需求,该开发工具可以完成胜任,Spring Tool Suit是在eclipse的基础上集成了spring产生的一款IDE工具。
Eclipse的工作原理如图 4所示。
图 4
2.3 本章小结
在本章中,主要从技术方面入手,确定了实现本项目使用到的开发环境,Spring Tool Suit开发工具以及所使用到的关键开发技术JSP、Spring、Spring Web MVC、MyBatis和关系型数据库Mysql。
3系统分析
创建一个系统,该用户可以通过游客的身份进行浏览图书商品,如果将商品加入购物车或者购买,必须注册一个有效的用户,注册信息通过邮箱进行激活,注册之后能够通过账号登陆在图书商城在线浏览,买书等功能。
3.1 可行性分析
本此系统的开发使用的是Spring Tool Suit开发环境,Spring Tool Suit是免费的,而且功能强大。对于本此系统的研究,该系统的模块众多,因此使用ssm开发框架的mvc模式进行管理。数据库方面则采用mysql简小的关系型数据库,免费的数据库。
所以在技术上是可行的。
这个系统可以应用于个人图书商城,方便进行网上交易。
通过对以上两个方面的可行性分析,确定系统可以进行开发。
3.2 主要功能分析
3.2.1 会员登录功能
通过前端页面提交的数据与数据库数据进行验证,验证成功即可登录;否则,无法登录。
3.2.2 会员注册功能
会员通过提交账户信息,然后进行邮箱验证,会员即注册成功。
3.2.3 普通查询功能
通过查询框,输入想要查询的书籍名称,即可查询出结果。
3.2.4 高级查询功能
通过使用高级查询,输入想要查询的书籍名称、作者、出版社进行查询,即可查询出结果。
3.2.5 添加购物车功能
选择想要的商品,通过点击购物车按钮,提前存放在购物车,方便之后进行查看。
3.2.6 支付功能功能
功能描述如图 5所示:
- 客户在商户下单购买商品,点击立即购买。
- 从购买页面跳转到支付收银台页面。
- 选择xx网银支付。下面是跳转中后台系统做的事情 ↓
- 商户后台组装form表单,包含订单信息、和签名信息等。(表单见下节)
- 跳转到网银页面,显示订单信息
- 输入账号密码,支付。
- 支付成功。
- 页面跳转(回调商户页面)。
- 商户支付成功页面。(更新订单状态)
- 客户支付成功!
图 5
3.2.7 分页显示功能
从数据库中将所有数据查询出来,分页显示在前端页面上,每页显示若干条数据,并实现"首页","上一页","下一页","尾页","跳转至指定页码","显示当前页码"等功能
4系统设计
本章将阐述本系统的总体设计思路,将系统的设计思路以更加清晰的方式呈现出来。主要从本系统的整体设计框架、如何设计并实现UI视图和系统各个模块的主要功能方面进行说明。
4.1概要设计
本系统设计的主要功能模块有会员登录、普通查询、高级查询、添加购物车、支付功能、会员注册、
邮箱激活、分页显示的整体功能模块如图 6所示:
图 6
4.2详细设计
本系统的核心功能是支付,通过银行第三方集成的支付进行支付功能实现。同时为提高用户体验,会对软件的功能进行设计。
4.2.1支付功能
支付功能详解:
- 用户在商城选购商品并发起支付请求;
- 商城将支付订单通过B2C网关收款接口传送至支付网关;
- 用户选择网银支付及银行,支付平台将订单转送至指定银行网关界面;
- 用户支付完成,银行处理结果并向平台返回处理结果;
- 支付平台接收处理结果,落地处理并向商户返回结果;
- 商城接收到支付公司返回结果,落地处理(更改订单状态)并通知用户。
一般而言支付系统会给商户设置有“可用余额”账户、“待结算”账户;系统在接收到银行返回支付成功信息会进行落地处理,一方面更改对应订单状态,另一方面在商户待结算账户记入一笔金额;该笔金额,系统会根据结算周期从待结算账户--->“可用余额”账户。
图 7 支付流程
图 8 支付详情
系统总流程如图 9所示:
图 9
4.3本章小结
本章我们对该应用系统的总体设计进行了介绍。既介绍了应用总体的设计框架,又分析了支付功能模块的设计思想。在分析过程中,我们通过图文结合的方式使得阐述过程更加清晰易懂。
5.系统实现
本章根据上一章的总体设计通过代码来实现本系统的相应功能,采用Java面向对象的。。。
5.1项目部署
5.1.1 环境
两台虚拟机:
都需要安装docker、docker-compose
5.1.2 安装Docker
- 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:
$ sudo apt-get remove docker docker-engine docker-ce docker.io
- 更新apt包索引:
$ sudo apt-get update
- 安装以下包以使apt可以通过HTTPS使用存储库(repository):
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
- 添加Docker官方的GPG密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 使用下面的命令来设置stable存储库:
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 再更新一下apt包索引:
$ sudo apt-get update
- 安装特定版本的Docker CE,请列出repo中的可用版本,然后选择并安装: 列出您的仓库中可用的版本:
sudo apt-cache madison docker-ce
- 按其完全限定的包名称安装特定版本,例如,包名称( )=版本字符串(第2列)
$ sudo apt-get install docker-ce=<VERSION>
如:
$ sudo apt-get install docker-ce=17.03.0~ce-0~ubuntu-xenial
- 验证docker
-
- 查看docker服务是否启动:
$ systemctl status docker
-
- 若未启动,则启动docker服务:
$ sudo systemctl start docker
5.1.3 Harbor仓库搭建
1. 安装docker(同5.1.1安装docker)
2. 用pip安装docker-compose
# apt install python-pip
# pip install docker-compose
测试:
# docker-compose version
3. 下载Harbor离线包
安装有两种方式,一种是off-line ,一种是on-line,即离线和在线安装,离线安装需要下载的安装包较大,在线安装下载的安装包很小,我选择的是离线版本v1.4.0-rc1。
# wget http://harbor.orientsoft.cn/harbor-v1.4.0/harbor-offline-installer-v1.4.0.tgz
4. 解压,进入安装包
# tar xf harbor-offline-installer-v1.4.0-rc1.tgz
# cd /opt/harbor
5. 修改配置文件
修改配置文件为:/opt/harbor/harbor.cfg,内容为:
6. 配置docker
#因为docker默认使用的是https连接,而harbor默认使用http连接,所以需要修改docker配置标志insecure registry不安全仓库的主机!
第一种方法:(我的使用)
#vim /etc/docker/daemon.json
第二种方法;
#vim /etc/systemd/system/multi-user.target.wants/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.186.120
#只加上--insecure-registry这个参数即可。
两种都重启docker:
#systemctl daemon-reload
#systemctl restart docker.service
7. 执行安装脚本:
#会拉取好几个镜像下来,及检查环境:
#./install.sh
8. Harbor启动和停止
Harbor 的日常运维管理是通过docker-compose来完成的,Harbor本身有多个服务进程,都放在docker容器之中运行,我们可以通过docker ps命令或docker-compose ps命令来查查看。
进入Harbor目录执行如下命令即可:
① 启动Harbor
# docker-compose start
② 停止Harbor
# docker-comose stop
-
- 重启Harbor
# docker-compose restart
9. 访问测试
在浏览器输入192.168.186.120/harbor。请大家根据自己的配置情况输入访问的域名;
默认账号密码: admin / Harbor12345 登录后修改密码
登录后进入harbor操作界面
5.1.4 部署项目
本项目采用Docker-compose与Docker结合的方式进行部署JavaWeb项目。
- Ubuntu DockerFile 文件
#使用的基础镜像 FROM ubuntu:14.04 #作者信息 MAINTAINER xxj "1521107575@qq.com" #安装vim RUN apt-get update && apt-get install -y vim && apt-get install -y curl #创建目录 RUN mkdir -p /docker/jdk1.8 #把当前目录下的jdk文件夹添加到镜像 ADD jdk1.8 /docker/jdk1.8 #创建目录 RUN mkdir -p /docker/tomcat7 #把当前目录下的jdk文件夹添加到镜像 ADD tomcat7 /docker/tomcat7
#添加环境变量 ENV JAVA_HOME /docker/jdk1.8 ENV TOMCAT_HOME /docker/tomcat7 ENV PATH $PATH:$JAVA_HOME/bin:$TOMCAT_HOME/bin #暴露8080端口 EXPOSE 8080 #启动时运行tomcat CMD ["/docker/tomcat7/bin/catalina.sh","run"] |
- docker-compose.yml 文件
version: '2.2' services: ubuntu: restart: always build: ./ubuntu image: ubuntu container_name: xxj2 hostname: xxj2 ports: - "9000:8080" volumes: - "$PWD/webapps:/docker/tomcat7/webapps"
networks: webnet: ipv4_address: 172.19.0.13 mysql: image: mysql:5.7 ports: - "5000:3306" environment: - MYSQL_ROOT_PASSWORD=123456 volumes: - "./mysql:/var/lib/mysql" - "/etc/mysql/mysql.conf.d/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf" - "./init:/docker-entrypoint-initdb.d/" networks: webnet: ipv4_address: 172.19.0.12 container_name: "ssm_mysql" hostname: ssm_mysql
networks: webnet: driver: bridge ipam: config: - subnet: 172.19.0.0/24 gateway: 172.19.0.2 |
- 相关目录结构
- 启动
使用docker-compose up –d在docker-compose.yml目录下启动项目。
- 销毁、停止、重启容器
-
- 销毁
docker-compose down
-
- 停止
docker-compose stop
-
- 重启
docker-compose restart
5.2图书商城系统展示
5.2.1首页展示
展示图 10图书商城系统首页
图 10图书商城系统首页