使⽤
docker
部署
project-exam-system
1.
背景,在⼀台主机之内,实现容器的编排,发布考试系统
2.
环境准备
1. docker
1. vim /etc/docker/daemon.json
2. docker-compos
3.
普通的部署
1.
镜像
1.
前端:
nginx latest
服务
1.
拉取
nignx:latest
镜像
2.
测试
3.
上传前端项⽬
dist
4.
创建启动容器
![](https://i-blog.csdnimg.cn/direct/e89d168355bc45af8151b07203518800.png)
5.
测试成功
6.
出现问题,在实现登录的时候,都实现后段异常,
原因后段还没后部署
7.
登录的时候请求的域名
bu.yuanyu.zhangmin,
我们是
hosts
域名劫持来实现
2.
后端的业务
jdk17 springboot
有点 不⽤单独部署
tomcat
,已经在
springboot
中内置
tomact
1.
准备拉取基础
centos
镜像
2. Docker run -it centos:latest /bin/bash
3. ctrl p q
4. jdk17
版本的⽂件
5.
项⽬资源
.war. .perpreties
6.
将在服务器上的
jaav
的资源⽂件上传到容器
1.
上传
jdk
![](https://i-blog.csdnimg.cn/direct/ea8dfb05a88b449c915b069fee3ea420.png)
2.
向容器上传为服务的项⽬⽂件
![](https://i-blog.csdnimg.cn/direct/aa67d9c59e0649a9a52f83ff6e1ddd7a.png)
3.
向容器上传微服务的配置⽂件
![](https://i-blog.csdnimg.cn/direct/b6083d34554440a7ac2460975e29808f.png)
4.
对已经传到容器的⽂件进⾏部署
![](https://i-blog.csdnimg.cn/direct/567fb7b1c59340e1a50a5993783ff056.png)
5.
解压⽂件到指定的⽬录,并且跳过第⼀层⽬录
![](https://i-blog.csdnimg.cn/direct/634f1078859a426f998c545a3f0e6d94.png)
6.
测试启动微服务
![](https://i-blog.csdnimg.cn/direct/0677c684749242dd916ca46555fd3647.png)
7.
修改
appllcaiton.properties
⽂件
1. spring.datesource.url=jdbc:msyql://
你的主机
的
ip:3306/project_exam_system
8. ctrl p q
退出
9.
根据容器创建镜像
![](https://i-blog.csdnimg.cn/direct/8b1107003142465298613b24c847476b.png)
10.
查看镜像
![](https://i-blog.csdnimg.cn/direct/e6d1b148682d48829ae71504ecdcd16e.png)
11.
停⽤原来的容器
![](https://i-blog.csdnimg.cn/direct/23f80b10b2dd47e9b9419a4232f01b53.png)
3.
移除原来的容器
![](https://i-blog.csdnimg.cn/direct/627fe7b44e5740b88f8d542fbc91c912.png)
4.
根据新建的镜像,创建容器
![](https://i-blog.csdnimg.cn/direct/13df8895741448cdb84924a82d389927.png)
14. docker ps
查看容器的进程
![](https://i-blog.csdnimg.cn/direct/e602ab47d5f7490cb1460712b4577a5b.png)
15.
将
java
容器的终端附加到当前终端
![](https://i-blog.csdnimg.cn/direct/e26d9db049774aef9b99b6f87da03682.png)
16.
启动
springboot
微服务
![](https://i-blog.csdnimg.cn/direct/9f4648d08a854a93b2ea51a09168eb43.png)
17.
数据持久化业务
mysq 5.7.44
1.
拉取
mysql:5.7.44
docker pull mysql:5.7.44
2.
上传
mysql
⽂件
3.
执⾏
mysql
⽂件
mysql -uroot -proot <
project_exam_system.sql
4.
启动
mysql
容器,并且映射端⼝
docker run -itd -p3306:3306
mysql:5.7.44
5.
使⽤
exec
指令访问数据库管理界⾯
![](https://i-blog.csdnimg.cn/direct/a4ec4d2ca0a64b2ab8f4832574c618a7.png)
nmt
nginx
1.
下载镜像,启动镜像,将本地的
dist
项⽬的⽬录挂载在容器
的
/usr/share/nginx/html
2.
启动服务
3.
前后端分离的项⽬,并⾮所有的请求都是来⾃于同⼀个位置,
设置请求的时候还是需要在
hosts
⽂件中挟持域名
4.
域名是固定的,但是,域名可以绑定不同的
ip
mysql
1.
各个版本都有官⽅的镜像,直接下载
docker pull msyql:5.7.44
2.
启动容器的时候,挂载
data
⽬录,
![](https://i-blog.csdnimg.cn/direct/cf66b1a40fad456a858fd833b6638b31.png)
3.
制作
data
的时候,顺⼿删除
auto.cnf
tomcat
![](https://i-blog.csdnimg.cn/direct/32c0396a0ace414ab59bfa69ec43151a.png)
制作
docker-compose.yml
⽂件,实现⼀键部署
步骤:
1.
启动
nginx
![](https://i-blog.csdnimg.cn/direct/6ba97126e89c446a953d14c320c8a397.png)
2.
启动
java
容器
3.
启动
mysql
配置⾼可⽤的项⽬
1.
先创建三个前段
nginx
容器
1.
端⼝不能映射
80
![](https://i-blog.csdnimg.cn/direct/081b860010004bd199297371a5b51020.png)
2.
现在在远程是⽆法访问
nginx
服务,⽽且现在也不希望外部
直接访问
nginx
,希望创建
nginx
服务的集群,这个集群被
haproxy
代理,创建三个
nginx
容器,创建⼀个
haproxy
服
务,⽽且
nginx
容器还需要指定名称,
web0 web1 web2
因为
如果没有名称,那么容器就⽆法被
haproxy --link
3.
启动
haproxy
容器
hap0
1.
拉取
haproxy
镜像
![](https://i-blog.csdnimg.cn/direct/4df471e53e494793831df5f7bbe8f86c.png)
2.
配置
![](https://i-blog.csdnimg.cn/direct/d9efef180bf546eb9f5c1daa5c5e823a.png)
![](https://i-blog.csdnimg.cn/direct/2beebb818de640d586477f214a76d0da.png)
![](https://i-blog.csdnimg.cn/direct/551c8cb1f049440bab6721c2fdb85c93.png)
![](https://i-blog.csdnimg.cn/direct/54cbb4dd71c648e987d9a0a78a81af70.png)
mode http
#
负载均衡算法
# static-rr
权重
, leastconn
最少连
接
, source
请求
IP,
轮询
roundrobin
balance roundrobin
#
⽇志格式
option tcplog
#
在
mysql
创建⼀个没有权限的
haproxy
⽤户,密码为空。
haproxy
⽤户
# create user 'haproxy'@'%'
identified by ''; FLUSH PRIVILEGES;
#option mysql-check user haproxy
#
这⾥是容器中的
IP
地址,由于配置的是
轮询
roundrobin
,
weight
权重其实没有⽣效
server web0 10.1.1.10:80 check
weight 1 maxconn 2000
server web1 10.1.1.10:81 check
weight 1 maxconn 2000
server web2 10.1.1.10:82 check
weight 1 maxconn 2000
#server MYSQL_3
192.168.130.102:3306 check weight 1
maxconn 2000
#
使⽤
keepalive
检测死链
# option tcpka
########################################
1.
在宿主机上安装了
haproxy
,配置,代理三个的
nginx
容器中的
web
服务,也是直接添加容器的
ip
地
址
![](https://i-blog.csdnimg.cn/direct/deed88855ebf4892afd65be0888de479.png)
2.
创建⼀个
haproxy
,将配置⽂件导⼊到容器,在容器
中启动
haproxy
,也是可以的
![](https://i-blog.csdnimg.cn/direct/a507def719a542deb9d75ed2d461ec50.png)
3.
实际的使⽤
haproxy
容器,只需要将配置⽂件挂载到
指定的⽬录就可以
![](https://i-blog.csdnimg.cn/direct/5721dbeab216447f8e5bc26852271f81.png)
3.
启动
4.
代理
java
服务
![](https://i-blog.csdnimg.cn/direct/a1763d3f14664bed8014d31162bb34c7.png)
![](https://i-blog.csdnimg.cn/direct/e5d32473b74441ad8585336c53623429.png)
![](https://i-blog.csdnimg.cn/direct/1d5fdada921547da915dd02fca9178b6.png)
5. ab
压⼒测试
yum provides *bin/ab
yum -y install httpd-tools
Docker-compose
⾃动化部
署
1.
安装
docker
source docker.sh
2.
安装
pip
yum -y install python2-pip
3.
升级
pip
pip install --upgrade pip==20.3 -i
https://mirrors.aliyun.com/pypi/simple
4.
安装
docker-compose
pip install docker-compose -i
https://mirrors.aliyun.com/pypi/simple
5.
创建
pes
⽬录以及⼦⽬录
cd
mkdir -p pes/{msyql,java,web}
6.
在
pes
⽬录下创建并且编辑
dockerr-compose.yml
⽂件
![](https://i-blog.csdnimg.cn/direct/e7a8e9a3aced41a0b5d73cd3ac7cc139.png)
![](https://i-blog.csdnimg.cn/direct/e08e7dfe407642099f9d70e838748d8a.png)
7.
添加
web
服务
![](https://i-blog.csdnimg.cn/direct/6d80a0435f2e48d58f7fe35965f6c00b.png)
8. docker-compose
启动集群
cd pes
docker-compose up -d
9. docker-compose
暂停集群
![](https://i-blog.csdnimg.cn/direct/a01ed881c0b24103af59dc848ea7101f.png)
10. docker-compose
移除容器
![](https://i-blog.csdnimg.cn/direct/29073fb65bf142dc8311e413dc27fab4.png)
11. docker-compose
多开容器
![](https://i-blog.csdnimg.cn/direct/e91ff5325ae944e385058794d446d367.png)