9.2笔记

使⽤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. 创建启动容器

docker run -itd -p80:80 -v

/root/project_exam_system/web/dist:/u

sr/share/nginx/html ngin x:latest

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

docker cp jdk... c389:/

2. 向容器上传为服务的项⽬⽂件

docker cp Project_exam_system.war

c389:/

3. 向容器上传微服务的配置⽂件

Docker cp application.properties

c389:/

4. 对已经传到容器的⽂件进⾏部署docer attach c389

5. 解压⽂件到指定的⽬录,并且跳过第⼀层⽬录

tar -zxvf idk-17.0.....tar.gz -C

/usr/local/jdk --strip

components=1

6. 测试启动微服务

/usr/local/jdk/bin/java -jar

Protect_exam_system.war

7. 修改appllcaiton.properties⽂件

1. spring.datesource.url=jdbc:msyql://你的主机

的ip:3306/project_exam_system

8. ctrl p q 退出

9. 根据容器创建镜像

docker commit 28b9 java:v0

10. 查看镜像

docker images

11. 停⽤原来的容器

docker stop 28b93. 移除原来的容器

docker rm 28b9

4. 根据新建的镜像,创建容器

docker run -itd -p8080:8080 java:v0

```

14. docker ps查看容器的进程

```

docker ps

```

15. 将java容器的终端附加到当前终端

docker attach ref8

```

16. 启动springboot微服务

/usr/local/jdk/bin/java -jar

Project_exam_system.war

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指令访问数据库管理界⾯

docker exec -it cdc8 mysql -uroot -

proot

# 由于在java的配置⽂件中,访问数据库的账号

和密码不是root,⽽是zhangmin

create user 'zhangmin'@'%' identified

by 'zhangmin';

grant all on *.* to 'zhangmin'@'%';

flush privileges;回顾

nmt

nginx

1.下载镜像,启动镜像,将本地的dist项⽬的⽬录挂载在容器

的/usr/share/nginx/html

2.启动服务

3.前后端分离的项⽬,并⾮所有的请求都是来⾃于同⼀个位置,

设置请求的时候还是需要在hosts⽂件中挟持域名

4.域名是固定的,但是,域名可以绑定不同的ip

mysql

1. 各个版本都有官⽅的镜像,直接下载 docker pull msyql:5.7.44

2. 启动容器的时候,挂载data⽬录,3. 制作data的时候,顺⼿删除auto.cnf

tomcat

docker run -itd -p3306:3306 -v

/root/pes/mysql/data:/var/lib/mysql

msyql:5.7.44

docker run -itd -p3306:3306 -e

MYSQL_ROOT_PASSWORD

1. 被war包集成,所以我们直接启动war

2. springboot 可以直接集成tomcat,build⼀个jar v包或者

是war

3. 我们没有安装tomcat

4. application.properties

1. 可以配置端⼝

2. 配置数据库的访问

5. 使⽤/usr/local/jdk/bin/java -jar

Project_ExamSystem-V1.0.0.war启动,但是在启动这个任务⼀

定要跳转到⽂件所在⽬录,因为在启动的同时,还需要加载

applicaiton.properrties

6. Dockerfile创建镜像,如果对象的主机上没有对应镜像,我们

希望使⽤⼀个⽂件创建项⽬,就需要使⽤到Dockerfile,使⽤

docker build,也需要在Dockerfile所在⽬录中执⾏docker

build,否则找到Dockerfile也是⽆法创建制作docker-compose.yml⽂件,实现⼀键部署

步骤:

1. 启动nginx

docker run -itd -p80:80 -v

/root/pes/web/src/dist/:/usr/share/nginx/html/

nginx:latest

2. 启动java容器

3. 启动mysql

配置⾼可⽤的项⽬

1. 先创建三个前段 nginx容器

1. 端⼝不能映射80docker run -itd -v

/root/pes/web/src/dist/:/usr/share/nginx/htm

l/ nginx:latest

2. 现在在远程是⽆法访问nginx服务,⽽且现在也不希望外部

直接访问nginx,希望创建nginx服务的集群,这个集群被

haproxy代理,创建三个nginx容器,创建⼀个haproxy服

务,⽽且nginx容器还需要指定名称,web0 web1 web2因为

如果没有名称,那么容器就⽆法被haproxy --link

3. 启动haproxy容器 hap0

1. 拉取haproxy镜像

docker pull haproxy

https://www.haproxy.com/documentation/ha

proxy-enterprise/getting

started/tutorials/docker

tutorial/#sidebar

2. 配置

global

daemon

# nbproc 1 # pidfile /var/run/haproxy.pid

# ⼯作⽬录

# chroot /usr/local/etc/haproxy

defaults

log 127.0.0.1 local0 err #[err

warning info debug]

mode http #默认的模

式mode { tcp|http|health },tcp是4层,http

是7层,health只会返回OK

retries 2 #两次连接

失败就认为是服务器不可⽤,也可以通过后⾯设置

option redispatch #当

serverId对应的服务器挂掉后,强制定向到其他健康

的服务器

option abortonclose #当服务器

负载很⾼的时候,⾃动结束掉当前队列处理⽐较久的链

option dontlognull #⽇志中不

记录负载均衡的⼼跳检测记录

maxconn 4096 #默认的最

⼤连接数

timeout connect 5000ms #连接超时

timeout client 30000ms #客户端超

timeout server 30000ms #服务器超

时 #timeout check 2000 #=⼼跳检

测超时

######## 监控界⾯配置 #################

listen admin_status

# 监控界⾯访问信息

bind 0.0.0.0:8888

mode http

# URI相对地址

stats uri /dbs

# 统计报告格式

stats realm Global\ statistics

# 登录账户信息

stats auth admin:123456

########frontend配置##############

######## mysql负载均衡配置 ###############

listen proxy-mysql

bind 0.0.0.0:3306

mode tcp

# 负载均衡算法

# 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 MYSQL_1

192.168.130.100:3306 check weight 1

maxconn 2000

server MYSQL_2

192.168.130.101:3306 check weight 1

maxconn 2000

#server MYSQL_3

192.168.130.102:3306 check weight 1

maxconn 2000

# 使⽤keepalive检测死链

# option tcpka

########################################

#

######## mysql负载均衡配置 ###############

listen proxy-web

bind 0.0.0.0:5000

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地

systemctl start haproxy

2. 创建⼀个haproxy,将配置⽂件导⼊到容器,在容器

中启动haproxy,也是可以的

docker cp

/root/pes/haproxy/haproxy.cfg 容器名

称|id:/usr/local/etc/haproxy/haproxy.

cfg

# 启动

haproxy -f

/usr/local/etc/haproxy/haproxy.cfg

3. 实际的使⽤haproxy容器,只需要将配置⽂件挂载到

指定的⽬录就可以docker run

-itd #交互 终端 后台

--link=web0 锚定web0

--link=web1

--link=web2

-p5000:5000

-v

#/root/pes/haproxy/haproxy.cfg:/usr/l

ocal/etc/haproxy/haproxy.cfg

# 将配置⽂件挂载到容器中

haproxy:latest #镜像

3. 启动

4. 代理java服务

# 通⽤java容器

docker stop java01

docker rm java01

# 开启三个java容器,名称分别为java0 java1

java2

docker run -itd --name java0 -v

/root/pes/java/src/:/java/src java:v0

docker run -itd --mane java1 -v

/root/pes/java/src/:/java/src java:v0docker run -itd --name java2 -v

/root/pes/java/src/:/java/src java:v0

#配置haproxy.cfg

listen proxy-java

bind 0.0.0.0:8080

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 j0 java0:8080 check

weight 1 maxconn 2000

server j1 java1:8080 check

weight 1 maxconn 2000

server j2 java2:8080 check

weight 1 maxconn 2000#server MYSQL_3

192.168.130.102:3306 check weight 1

maxconn 2000

# 使⽤keepalive检测死链

# option tcpka

########################################

#

# 移除haproxy容器,重新创建

docker stop hap0

docker -itd --name hap0 --link=web0 --

link=web1 --link=web2 --link=java0 --

linke=java1 --link=java2 -p8080:8080 -

p8888:8888 -p5000:5000 -v

/root/pes/haproxy/haproxy.cfg:/usr/local

/etc/haproxy/haproxy nginx:latest

5. ab压⼒测试

yum provides *bin/ab

yum -y install httpd-toolsDocker-compose⾃动化部

1. 安装docker

source docker.sh

2. 安装pip

yum -y install python2-pip

3. 升级pippip 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⽂件

cd pes

vim docker-compose.yml

version: "3"

servies:

web:

container_name: web0

image: nginx:latest ports:

- "80:80"

expose:

- 80

volumes:

- ./web/src/dist/:/usr/share/nginx/html/

restart: "always"

java:

mysql:

7. 添加web服务

web:

container_name: web0

image: nginx:latest

ports:

- "80:80"

expose:

- 80

volumes:

- ./web/src/dist/:/usr/share/nginx/html/

restart: "always"

8. docker-compose启动集群cd pes

docker-compose up -d

9. docker-compose暂停集群

cd pes

docker-compose stop

10. docker-compose移除容器

docker-compose down

11. docker-compose多开容器

docker-compose up -d --scale web=5

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值