一、配置docker-compose.yml
vim ./pes/docker-compose
version: "3"
services:
weba:
container_name: web0
image: nginx:latest
#ports:
#- "80:80"
expose:
- 80
volumes:
- ./web/src/dist/:/usr/share/nginx/html/
webb:
container_name: web1
image: nginx:latest
#ports:
#- "80:80"
expose:
- 80
volumes:
- ./web/src/dist/:/usr/share/nginx/html/
webc:
container_name: web2
image: nginx:latest
#ports:
#- "80:80"
expose:
- 80
volumes:
- ./web/src/dist/:/usr/share/nginx/html/
javaa:
container_name: java0
build: ./java #这个java⽬录下必须要有Dockerfile
#ports:
#- "8080:8080"
expose:
- 8080
volumes:
- ./java/src/:/java/src/
javab:
container_name: java1
build: ./java #这个java⽬录下必须要有Dockerfile
#ports:
#- "8080:8080"
expose:
- 8080
volumes:
- ./java/src/:/java/src/
mysql:
container_name: mysql0
image: mysql:5.7.44
ports:
- "3306:3306"
expose:
- 3306
volumes:
- ./mysql/data/:/var/lib/mysql/
haproxy:
container_name: haproxy0
image: haproxy:latest
ports:
-
"8888:8888"
-
"5000:5000"
-
"8080:8080"
volumes:
./haproxy/haproxy/haproxy.cfg:/usr/local/etc/haprox
y/haproxy.cfg
links:
-
web0
-
web1
-
web2
-
java0
-
java1
二、配置haproxy.cfg
######## 监控界⾯配置 #################
listen admin_status
监控界⾯访问信息
bind 0.0.0.0:8888
mode http
URI相对地址
stats uri /dbs
统计报告格式
stats realm Global\ statistics
登录账户信息
stats auth admin:123456
########frontend配置##############
######## 代理nginx服务 ###############
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 web0:80 check weight 1 maxconn 2000
server web1 web1:80 check weight 1 maxconn 2000
server web2 web2:80 check weight 1 maxconn 2000
#server MYSQL_3 192.168.130.102:3306 check
weight 1 maxconn 2000
使⽤keepalive检测死链
option tcpka
#########################################
######## java的负载均衡配置 ###############
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 javaa java0:8080 check weight 1
maxconn 2000
server javab java1:8080 check weight 1
maxconn 2000
#server MYSQL_3 192.168.130.102:3306 check
weight 1 maxconn 2000
使⽤keepalive检测死链
option tcpka
#########################################
三、配置Application.properties
spring.datasource.url=jdbc:mysql://192.168.71.10:33
06/project_exam_system
spring.datasource.username=zhangmin
spring.datasource.password=zhangmin
spring.datasource.driver-class
name=com.mysql.cj.jdbc.Driver
四、注意事项
-
web
-
直接使⽤或者下载nginx:latest,如果你觉得下载速度太慢,可以⾃⼰配置⾮安全私有仓库(registy镜像,活着harbor都可以,)但是在调⽤奖项的时候(192.168.71.11/libary/nginx:latest)
-
nginx容器的资源⽂件默认在/usr/share/nginx/html
-
nginx容器的配置⽂件默认在/etc/nginx/nginx.conf
-
有时候我们需要挂载配置⽂件和资源⽂件就需要挂载两个⽬录
volumes:
-
./web/nginx.conf:/etc/nginx/nginx.conf
-
./web/src/dist/:/usr/share/nginx/html/
-
expose⽤于容器向宿主暴露端⼝,保证宿主内部的容器能够相互访问
-
ports ⽤于将容器的端⼝映射到宿主的端⼝,容易重复,所以需要谨慎
-
Container_name 容器名称,不允许重复
-
image是要调⽤的镜像,如果在当前宿主上没有主机的镜像,会⾃动下载,如果没有指定标签的镜像,会默认从公⽹仓库下载
-
java
-
build 如果没有现成的镜像,需要我们⾃⼰创建新的进项,就需要我们写⼀个Dockerfile,build指向Dockerfile所在的⽬录
-
java的配置⽂件application.properties|yml
-
在运维的时候,主要是配置的datasource
-
url
-
ip
-
端⼝
-
driver ⼀般不需要修改,特殊情况是换了数据库软件
mysql sqlserver oracle
-
username
-
Password
-
尽量把java的war,jar和配置放在⼀起,在执⾏启动命令的时候,需要将⽬录跳转到资源⽂件所有的⽬录,在启动的同时会读取配置⽂件(application.properties)
-
java有多个版本,需要开发⼈员提供版本号
-
Java17.0.12
-
⾼版本兼容低版本,⼀般来说,22版本⼀般来说可以运⾏17开发的程序
-
要求都在同⼀个⼤版本之内
-
mysql
-
⽤于容器创建和销毁,所以持久化的数据,应该保存在宿主上
-
Mysql5.7.44的资源⽂件/var/lib/mysql
-
在容器中也是可以做主从复制以及读写的分离的。(需要⼤家⾃⼰完成)
-
docker-compose的⽂件⽬录
[root@docker pes]# tree -L 2
.
"## docker-compose.yml
"## haproxy
$ %## haproxy.cfg
"## java
$ "## Dockerfile
$ "## jdk
$ "## src
$ %## start.sh
"## mysql
$ "## data
$ %## project_exam_system.sql
%## web
%## src*