web
--拉取nginx
--挂载项目文档 dist
--docker run -itd -v /root/pes/web/dist/:/usr/share/nginx/html -p80:80 nginx:latest
配置mysql服务
--拉取mysql:5.7.44镜像
--创建容器测试
docker run -itd -p3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7.44
docker exec -it 容器id mysql -uroot -proot
也可以使用外部数据库来测试,如navicat
--导入数据
--删除测试的容器
--使用镜像的mysql服务,但要挂载自己的data
mysql的镜像对应的数据文件/var/lib/mysql,我们在启动容器的时候,准备一个data目录挂载到容器中的/var/lib/mysql就可以保证数据的持续修改
docker exec -it 容器id ls /var/lib/mysql
上传data,删除data下的auto.cnf:
rm -rf /data/auto.cnf
用自己的data替代mysql的data:
docker run -itd -p3306:3306 -v /root/data:/var/lib/mysql mysql:5.7.44 启动时不需要指定密码了,因为数据库的账号和密码都已经保存在data中mysql数据库中
haproxy
--拉取haproxy镜像
--在官网下载配置文件
使用docker-compose自动化部署考试系统
1.安装docker
2.安装pip
[root@docker ~]# yum -y install python2-pip
3.升级pip
[root@docker ~]# pip install --upgrade pip==20.3 -i https://mirrors.aliyun.com/pypi/simple
4.安装docker-compose
[root@docker ~]# pip install docker-compose -i https://mirrors.aliyun.com/pypi/simple
5.创建pes目录以及子目录
[root@docker ~]# ls
anaconda-ks.cfg docker.sh pes pes.tar.gz
[root@docker ~]# cd pes
[root@docker pes]# ls
docker-compose.yaml haproxy java mysql web
[root@docker pes]# cd java
[root@docker java]# ls
Dockerfile jdk src start.sh
[root@docker pes]# tree java -L 2
java
├── Dockerfile
├── jdk
│ ├── bin
│ ├── conf
│ ├── include
│ ├── jmods
│ ├── legal
│ ├── lib
│ ├── LICENSE -> legal/java.base/LICENSE
│ ├── man
│ ├── README
│ └── release
├── src
│ ├── application.properties
│ └── Project_ExamSystem-V1.0.0.war
└── start.sh
9 directories, 7 files
[root@docker java]# vim Dockerfile
FROM centos:latest
ADD jdk/ /usr/local/jdk/
RUN mkdir -p /java/
ADD src/ /java/src/
ADD start.sh /start.sh
RUN chmod -v +x /start.sh
WORKDIR /java/src/
CMD [ "/start.sh","/bin/bash" ]
[root@docker java]# vim start.sh
#!/bin/bash
/usr/local/jdk/bin/java -jar /java/src/*.?ar
[root@docker pes]# cd web
[root@docker web]# ls
dist
[root@docker web]# ls dist/
assets favicon.ico index.html
[root@docker pes]# cd mysql/
[root@docker mysql]# ls
data data0
[root@docker mysql]# ls data
auto.cnf docker01.yuanyu.zhangmin.err ibtmp1 project_exam_system
ca-key.pem ib_buffer_pool mysql public_key.pem
ca.pem ibdata1 mysql.sock server-cert.pem
client-cert.pem ib_logfile0 performance_schema server-key.pem
client-key.pem ib_logfile1 private_key.pem sys
[root@docker pes]# cd haproxy/
[root@docker haproxy]# ls
haproxy.cfg
[root@docker pes]# vim docker-compose.yaml
version: "3"
services:
web01:
container_name: web01
image: nginx:latest
volumes:
- ./web/dist/:/usr/share/nginx/html/
expose:
- 80
web02:
container_name: web02
image: nginx:latest
volumes:
- ./web/dist/:/usr/share/nginx/html/
expose:
- 80
web03:
container_name: web03
image: nginx:latest
volumes:
- ./web/dist/:/usr/share/nginx/html/
expose:
- 80
haporxy:
container_name: hap
image: haproxy:latest
volumes:
- ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
ports:
- "8888:8888"
- "80:5000"
- "8080:6000"
expose:
- 8888
- 5000
- 6000
- 3306
javaa:
container_name: java01
build: ./java
expose:
- 8080
volumes:
- ./java/src/:/java/src/
javab:
container_name: java02
build: ./java
expose:
- 8080
volumes:
- ./java/src/:/java/src/
javac:
container_name: java03
build: ./java
expose:
- 8080
volumes:
- ./java/src/:/java/src/
mysql:
container_name: mysql01
image: mysql:5.7.44
expose:
- 3306
volumes:
- ./mysql/data/:/var/lib/mysql/
mysqla:
container_name: mysql02
image: mysql:5.7.44
expose:
- 3306
volumes:
- ./mysql/data0/:/var/lib/mysql/
[root@docker haproxy]# vim 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
######## 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 mysql01:3306 check weight 1 maxconn 2000
server MYSQL_2 mysql02:3306 check weight 1 maxconn 2000
#server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
# 使用keepalive检测死链
# option tcpka
#########################################
######## web负载均衡配置 ###############
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 a web01:80 check weight 1 maxconn 2000
server b web02:80 check weight 1 maxconn 2000
server c web03: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:6000
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 java01:8080 check weight 1 maxconn 2000
server javab java02:8080 check weight 1 maxconn 2000
server javac java03:8080 check weight 1 maxconn 2000
#server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
# 使用keepalive检测死链
# option tcpka
#########################################
[root@docker java]# ls src/
application.properties Project_ExamSystem-V1.0.0.war
[root@docker java]# vim src/application.properties
spring.datasource.url=jdbc:mysql://hap:3306/project_exam_system
spring.datasource.username=zhangmin
spring.datasource.password=zhangmin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
docker-compose启动集群
[root@docker pes]# docker-compose up -d
[root@docker pes]# docker-compose ps
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
from cryptography.hazmat.backends import default_backend
Name Command State Ports
-----------------------------------------------------------------------------------------
hap docker-entrypoint.sh hapro ... Up 3306/tcp,
0.0.0.0:80->5000/tcp,:::80->5000/tcp,
0.0.0.0:8080->6000/tcp,:::8080->6000/t
cp, 0.0.0.0:8888->8888/tcp,:::8888->88
88/tcp
java01 /start.sh /bin/bash Up 8080/tcp
java02 /start.sh /bin/bash Up 8080/tcp
java03 /start.sh /bin/bash Up 8080/tcp
mysql01 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
mysql02 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
web01 /docker-entrypoint.sh ngin ... Up 80/tcp
web02 /docker-entrypoint.sh ngin ... Up 80/tcp
web03 /docker-entrypoint.sh ngin ... Up 80/tcp
expose:
向宿主机暴露自己(容器)的端口