使用docker容器部署考试系统

news2024/12/26 21:54:01

8.30

回顾

1、使用harbor仓库

python --version

yum -y update

yum -y install python2-pip

部署考试系统

使用docker部署project-exam-system

1、在一台主机内,实现容器的编排看,发布考试系统

2、环境准备

docker

docker-compose

docker脚本
[root@docker001 ~]# vim docker.sh
cat << EOF | tee /etc/modules-load.d/k8s.conf 
overlay
br_netfilter
EOF
 
modprobe overlay
 
modprobe br_netfilter
 
cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
 
sysctl --system
 
yum install -y yum-utils device-mapper-persistent-data lvm2
 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 
 
 
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
 
# 运行docker脚本
[root@docker001 ~]# source docker.sh 

修改配置文件

[root@docker001 ~]# vim /etc/docker/daemon.json
 
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
[root@docker001 ~]# vim /usr/lib/systemd/system/docker.service 
13	ExecStart=/usr/bin/dockerd
[root@docker001 ~]# systemctl daemon-reload

重启服务

[root@docker001 ~]# systemctl restart docker

3、普通的部署

镜像

拉取nginx镜像
[root@docker001 ~]# docker pull nginx
查看镜像
[root@docker001 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    5ef79149e0ec   2 weeks ago   188MB
创建容器
# 创建容器
[root@docker001 ~]# docker run -itd -p80:80 nginx:latest 
db8ffd17378657990222bb65accff54631c41e9251c844f1f95c8b66d44a0c7a
 
# 查看创建的容器
[root@docker001 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                               NAMES
db8ffd173786   nginx:latest   "/docker-entrypoint.…"   26 seconds ago   Up 25 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   upbeat_stonebraker
 
# 访问测试
[root@docker001 ~]# curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
 
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
 
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
 
# 使用exec命令查看容器nginx中的/usr/share/nginx/html目录
[root@docker001 ~]# docker exec -it db8 ls /usr/share/nginx/html
50x.html  index.html

--前端:nginx latest服务

创建一个目录,不单独放置前端的资料,将后端的所有资料也都放在这里

创建目录
[root@docker001 ~]# mkdir project_exam_system
[root@docker001 ~]# cd project_exam_system/
[root@docker001 project_exam_system]# mkdir web
[root@docker001 project_exam_system]# cd web/
[root@docker001 web]# rz -E
rz waiting to receive.


将dist文件放到web目录下
# 解压dist.zip包
[root@docker001 web]# unzip dist.zip
 
# 查看解压后的文件
[root@docker001 web]# ls
dist  dist.zip
 
# 删除dist.zip包
[root@docker001 web]# rm -rf dist.zip 
 
# 只需要留下解压后的dist文件
[root@docker001 web]# ls
dist

#查看内容
[root@docker001 web]# cd ..
[root@docker001 project_exam_system]# ls web/dist/
assets  favicon.ico  index.html

删除测试nginx页面所创建容器
# 停止db8容器的运行
[root@docker001 project_exam_system]# docker stop db8
db8
 
# 删除容器
[root@docker001 project_exam_system]# docker rm db8
db8


#创建容器,映射端口,挂载目录
[root@docker001 web]# docker run -itd -p80:80 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html nginx:latest
11568e4a88646ea4b1cb9243678fe220ae263ea70591441f093dd72a7f4660a8

查看所创建的容器

[root@docker001 web]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                                       NAMES
11568e4a8864   nginx:latest   "/docker-entrypoint.…"   29 seconds ago   Up 28 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp           vibrant_gates

修改hosts文件

-在物理机的C:\Windows\System32\drivers\etc中找到hosts文件,添加IP地址和域名

--测试

--上传前端项目dist

--创建启动容器

[root@d3 project_exam_system]# docker run -itd -p80:80 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html nginx:latest5b4ca7741c21ecffe34e13e3b7c6da3e9fb7901bb68b3bab7c470ee83b0ca91b[root@d3 project_exam_system]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5b4ca7741c21 nginx:latest "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp wonderful_hertz

浏览器访问测试

在实现登录的时候,出现问题,因为后端还没有部署

登录的时候

-后端的业务 springboot 不用单独部署tomcat,已经在springboot中内置

-数据持久化业务 mysql5.7

关于后端

#拉取cnetos镜像
[root@docker001 ~]# docker pull centos
#拖包
#将软件包jdk-17_linux-x64_bin.tar.gz 和软件包project_exam_system.zip拖到root下
[root@docker001 ~]# ls
anaconda-ks.cfg  docker.sh  jdk-17_linux-x64_bin.tar.gz  project_exam_system.zip
#解压
解压project_exam_system.zip软件包
[root@docker001 ~]# unzip project_exam_system.zip 
Archive:  project_exam_system.zip
 
# 查看解压包后的文件
[root@docker001 ~]# ls
anaconda-ks.cfg         docker.sh                    Project_ExamSystem-V1.0.0.war
application.properties  jdk-17_linux-x64_bin.tar.gz  project_exam_system.zip
dist                    project_exam_system.sql

#创建容器
# 使用centos镜像创建容器
[root@docker001 ~]# docker run -itd centos:latest /bin/bash
d107d28c1503012c6f9aa43d09c94d64f439c60de61d2c3c2d4d565690fdca0f
 
# 查看创建的容器
[root@docker001 ~]# docker ps
CONTAINER ID   IMAGE           COMMAND                   CREATED          STATUS          PORTS                               NAMES
d107d28c1503   centos:latest   "/bin/bash"               12 seconds ago   Up 11 seconds                                       quirky_chandrasekhar
11568e4a8864   nginx:latest    "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    0.0.0.0:80->80/tcp, :::80->80/tcp   vibrant_gates


# 将宿主机的jdk包复制到容器中
[root@docker001 ~]# docker cp jdk-17_linux-x64_bin.tar.gz d107:/
Successfully copied 183MB to d107:/
 
# 将宿主机的Project包复制到容器中
[root@docker001 ~]# docker cp Project_ExamSystem-V1.0.0.war d107:/
Successfully copied 41MB to d107:/
 
# 将宿主机的application文件复制到容器中
[root@docker001 ~]# docker cp application.properties d107:/
Successfully copied 4.1kB to d107:/

#挂载容器终端
[root@docker001 ~]# docker attach d107

查看容器中是否有软件包

[root@d107d28c1503 /]# ls
Project_ExamSystem-V1.0.0.war  home			    media  run	 usr
application.properties	       jdk-17_linux-x64_bin.tar.gz  mnt    sbin  var
bin			       lib			    opt    srv
dev			       lib64			    proc   sys
etc			       lost+found		    root   tmp
# 在容器中创建目录
[root@d107d28c1503 /]# mkdir /usr/local/jdk
 
# 解压软件包到指定目录,并且跳过第一层目录
[root@d107d28c1503 /]# tar -zxf jdk-17_linux-x64_bin.tar.gz -C /usr/local/jdk/ --strip-components=1
 
[root@d107d28c1503 /]# ls /usr/local/jdk/
LICENSE  README  bin  conf  include  jmods  legal  lib	man  release

修改application.properties文件

[root@d107d28c1503 /]# vi application.properties 
spring.datasource.url=jdbc:mysql://192.168.2.60:3306/project_exam_system

在容器中运行,且访问验证

[root@d107d28c1503 /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war
 
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 
 :: Spring Boot ::                (v3.3.2)
 ...
...
[root@docker001 ~]# curl 173.17.0.3:8080
 
{"code":20002,"msg":"账号不存在或密码错误"}[root@docker001 ~]# 

创建java镜像

[root@docker001 ~]# docker commit d107 java:v0
sha256:64b4ea040bff2b7d3476273d62a5ae235fabe90e495ea81c6ac4efc6e33f2fd3
 
# 查看创建的java镜像
[root@docker001 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
java         v0        64b4ea040bff   10 seconds ago   774MB
<none>       <none>    22eb536c0d76   54 minutes ago   774MB
nginx        latest    5ef79149e0ec   2 weeks ago      188MB
centos       latest    5d0da3dc9764   2 years ago      231MB
[root@docker001 ~]# docker ps
CONTAINER ID   IMAGE           COMMAND                   CREATED          STATUS          PORTS                               NAMES
d107d28c1503   centos:latest   "/bin/bash"               14 minutes ago   Up 14 minutes                                       quirky_chandrasekhar
11568e4a8864   nginx:latest    "/docker-entrypoint.…"   17 minutes ago   Up 17 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   vibrant_gates

删除centos创建的容器

# 停止容器
[root@docker001 ~]# docker stop d107
d107
 
# 删除容器
[root@docker001 ~]# docker rm d107
d107

用java镜像创建容器

[root@docker001 ~]# docker run -itd -p8080:8080 java:v0
464d9b2b5f0b4a0cb80ac134128130393f67f7d0bf37c84763cdbf5a29015c1f

运行

# 挂载创建的容器的终端
[root@docker001 ~]# docker attach 464d
 
# 运行
[root@464d9b2b5f0b /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war

访问测试,出现200,500即可

数据库持久化-5.7.44

拉取mysql镜像

[root@docker001 ~]# docker pull mysql:5.7.44

创建

# 使用mysql镜像创建端口号为3306,用户和密码为root的容器
[root@docker001 ~]# docker run -itd -e MYSQL_ROOT_PASSWORD=root -p3306:3306 mysql:5.7.44 
1a07feb046ee3038c2364c5b655ff4cfd31acf28db5e747810fc42b05195338d
 
# 查看创建的容器
[root@docker001 ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                   CREATED              STATUS              PORTS                                                  NAMES
1a07feb046ee   mysql:5.7.44   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   optimistic_herschel
464d9b2b5f0b   java:v0        "/bin/bash"               2 hours ago          Up About an hour    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              epic_pascal
11568e4a8864   nginx:latest   "/docker-entrypoint.…"   3 hours ago          Up About an hour    0.0.0.0:80->80/tcp, :::80->80/tcp                      vibrant_gates
在project_exam_system/目录下创建mysql目录
[root@docker001 ~]# mkdir mysql
[root@docker001 ~]# mv mysql project_exam_system/
[root@docker001 ~]# ls project_exam_system/

远程登录执行sql文件

完成之后,登录mysql

[root@docker001 ~]# docker exec -it 1a mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.44 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
 
# 查看数据库
mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| project_exam_system |
| sys                 |
+---------------------+
5 rows in set (0.00 sec)
 
# 创建和java项目中的用户
mysql> create user 'zhangmin'@'%' identified by 'zhangmin';
Query OK, 0 rows affected (0.00 sec)
 
# 给创建的用户所有的权限
mysql> grant all on *.* to 'zhangmin'@'%';
Query OK, 0 rows affected (0.00 sec)
 
# 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
mysql> 

再登录,输入用户名和密码,可以进入考试系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云征文|遥遥领先的华为云Flexus云服务器X它来了~~~~

文章目录 ❀前言❀概述❀优点❀黑科技❀购买❀注册账号❀选配 ❀服务器连接 ❀前言 随着云计算时代的进一步深入&#xff0c;越来越多的中小企业企业与开发者需要一款简单易用、高能高效的云计算基础设施产品来支撑自身业务。云服务器相较于于实体服务器&#xff0c;操作更简单…

多目标应用:基于双存档模型的多模态多目标进化算法(MMOHEA)的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

DPDK简介及相关资料整理

DPDK全称为Date planedevelopment kit&#xff0c;是一个用来进行包数据处理加速的软件库。与传统的数据包处理相比&#xff0c;DPDK具有以下特点&#xff1a; 1) 轮询&#xff1a;在包处理时避免中断上下文切换的开销&#xff0c; 2) 用户态驱动&#xff1a;规避不必要的内存…

如何定义核心场景用例?

​首先我们解决两个问题&#xff1a; 1.什么是场景测试&#xff1f; 2.什么是核心场景&#xff1f; 1、什么是场景测试&#xff1f; &#x1f3af; 1.1&#xff1a;什么是场景 事件触发时的情景形成了场景。场景必不可少的几个要素&#xff1a;环境、人、时间、行为。简而…

3.7 移位指令

&#x1f393; 微机原理考点专栏&#xff08;通篇免费&#xff09; 欢迎来到我的微机原理专栏&#xff01;我将帮助你在最短时间内掌握微机原理的核心内容&#xff0c;为你的考研或期末考试保驾护航。 为什么选择我的视频&#xff1f; 全程考点讲解&#xff1a;每一节视频都…

JAVA进阶学习14

文章目录 常用工具包commons-ioHutool工具包一、多线程1.1 多线程的实现方法1.2 多线程常见的成员方法1.3 线程的安全问题1.4 同步方法1.5 lock锁1.6 线程的死锁1.7 生产者消费者问题&#xff08;等待唤醒机制&#xff09;1.8 阻塞队列——同样解决生产和消费的问题1.9 线程的状…

【5G PHY】5G循环前缀(CP)设计思路简述

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

苹果手机升级iOS 18时一直显示“正在检测更新”怎么办?

随着科技的不断发展&#xff0c;苹果手机的iOS系统也在不断迭代更新&#xff0c;为用户带来更加优质的使用体验。然而&#xff0c;在升级iOS 18的过程中&#xff0c;一些用户可能会遇到手机一直显示“正在检测更新”的问题&#xff0c;导致无法顺利完成系统升级。 这种情况不仅…

线性代数 第五讲:线性方程组_齐次线性方程组_非齐次线性方程组_公共解同解方程组_详解

线性方程组 文章目录 线性方程组1.齐次线性方程组的求解1.1 核心要义1.2 基础解系与线性无关的解向量的个数1.3 计算使用举例 2. 非齐次线性方程的求解2.1 非齐次线性方程解的判定2.2 非齐次线性方程解的结构2.3 计算使用举例 3.公共解与同解3.1 两个方程组的公共解3.2 同解方程…

标准库标头 <charconv>(c++17)学习

此头文件是strings library. std::to_chars_result 是 std::to_chars 的返回类型。它没有基类&#xff0c;并且只有以下成员。 数据成员 成员名字定义 ptr char* 类型的指针 (公开成员对象) ec std::errc 类型的错误码 (公开成员对象) std::from_chars_result 是 std::from…

CSS瀑布流实现

文章目录 前言前置知识 React 中实现代码实现 Vue 中实现代码实现 前言 瀑布流是一种CSS布局技术&#xff0c;它允许不同高度的元素在页面上以美观的方式排列&#xff0c;同时保持行与列间的间距一致。 前置知识 使用 multi-column 实现多列布局 column-count: 设置布局显示…

深度学习实战4--GAN进阶与优化

GAN 的问题主要有两点&#xff1a;Loss 等于0的梯度消失问题和梯度不稳定以及多样性受损。 前者是因为选择的分布函数使用JS 距离&#xff0c;这个距离不能衡量两个不相交的分布的距离&#xff1b;后者是因为Loss 函数要求KL 距离最小&#xff0c;JS 距离最大&#xff0c;所以…

趣味算法------回文数

目录 ​编辑 前言 什么是回文数 题目描述 解题思路 具体代码 C语言代码 python代码 总结 ps 前言 什么是回文数 回文数&#xff08;Palindrome Number&#xff09;是一种特殊的数字&#xff0c;它正读和反读都是一样的。例如&#xff0c;121&#xff0c;12321&#xf…

统计学第4天

学前知识点 方差&#xff1a;反映一组数据离散程度&#xff0c;除n是为了缩小数据量对结果的影响。 标准差&#xff1a; 多个统计量推断 使用z统计量和t统计量可对两个总体参数进行推断&#xff0c;如果需要对更多的参数进行推断需要研究多个变量之间的关系&#xff0c;需要…

vscode安装rest client插件,提示XHR failed

vscode安装rest client插件&#xff0c;提示XHR failed: 本地搜索rest client插件&#xff0c;然后下载&#xff0c;放到容器对应位置&#xff0c;参考&#xff1a;

GeoScene Pro教程(006):GeoScenePro地图集制作

文章目录 1、加载数据2、修改地图样式3、修改外观4、显示上下左右各为哪个地市5、新建布局6、选择地图框显示区域7、插入指北针、比例尺、图例8、显示相邻地市9、导出地图地图系列的构建来自单个地图图幅的集合,每个图幅显示 特定的地图范围,包含 动态地图元素和 静态地图…

测试用例的具体方法

1.等价类 依据需求将输⼊&#xff08;特殊情况下会考虑输出&#xff09;划分为若⼲个等价类&#xff0c;从等价类中选出⼀个测试⽤例&#xff0c;如果这个测试⽤例测试通过&#xff0c;则认为所代表的等价类测试通过&#xff0c;这样就可以⽤较少的测试⽤例达到尽量多的 功能覆…

建模杂谈系列253 序列突变点的判定

说明 使用pycm3进行推断。 内容 1 环境搭建 使用conda创建对应的包环境&#xff0c;然后再通过jupyter运行 conda create -c conda-forge -n pymc_env "pymc>5" conda activate pymc_envpip3 install ipython -i https://mirrors.cloud.tencent.com/pypi/si…

JavaScript高级进阶(一)

什么是BOM BOM: Browser Object Model(浏览器对象模型) 提供了独立于内容与浏览器窗口进行交互的对象&#xff0c;你可以前进后退……历史记录等&#xff0c;是浏览器自动生成的功能。 浏览器对象模型 对象以及说明: window: 窗口对象&#xff0c;可以用来控制当前窗口&…

FreeRTOS中任务通知的使用

目录 0x01 任务通知介绍0x02 示例代码 0x01 任务通知介绍 简单举个例子&#xff1a; 例如任务一用于获取数据&#xff0c;任务二用于处理数据。 但这其中存在一个先后关系&#xff1a;必须等到任务一获取完了数据&#xff0c;任务二才能开始工作&#xff0c;你会如何选择何种…