使用docker部署考试系统

发布于:2024-09-18 ⋅ 阅读:(124) ⋅ 点赞:(0)

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目录以及子目录

mkdir -p pes/{msyql,java,web}

[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:

向宿主机暴露自己(容器)的端口


网站公告

今日签到

点亮在社区的每一天
去签到