day40(8/30)——使用docker部署project-exam-system

news2024/11/15 21:56:13

一、回顾
1、使用harbao仓库
1. Python -- version

2. yum -y update

3. yum -y install python2-pip

4. pip install --upgrade pip==20.3  -i https://mirrors.aliyun.com/pypi/simple

5.  pip install docker-compose  -i https://mirrors.aliyun.com/pypi/simple

6. source docker.sh

7. 解压harbar

8. vim harbor.yml

        8.1 hostname

        8.2 https 注释

9. ./prepare

10. ./installed

        10.1 使用nginx发布web服务

        10.2 使用registry管理

2、docker-compose的编排
        1. 在学习kubernetes之前的热身

        2. 通过运行一个yum管理docker容器

        3. docker-compose.yml

vim docker-compose.yml
version: "2"
service: 
    nginx:
        contanner_name: name0
        image: nginx:latest
        ports:
        - "80:80"
        volumns:
        - /opt/web/:/usr/share/nginx/html/

1.容器的角色

2.容器的位置

3.容器的启动

4.容器之间的关系

playbook role 编排

二、使用docker部署project-exam-system
1、背景
在一台主机之内,实现容器的编排,发布考试系统

2、 环境准备
1. docker
1.1 vim /etc/docker/daemon.json

[root@docker ~]# 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@docker ~]# systemctl start docker

3、普通部署
1. 镜像
1.1 前端:nginx服务
(1)拉取nginx:latest镜像

[root@docker ~]# docker search nginx
[root@docker ~]# docker pull nginx

(2)创建nginx容器

[root@docker ~]# docker run -itd -p80:80 nginx:latest 

[root@docker ~]# docker ps --all

CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                               NAMES
243f7f9a0470   nginx:latest   "/docker-entrypoint.…"   12 seconds ago   Up 12 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   ecstatic_johnson
[root@docker ~]# docker exec -it 243 ls /usr/share/nginx/html
50x.html  index.html

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

[root@docker ~]# mkdir project_exam_system
[root@docker ~]# cd project_exam_system/
[root@docker project_exam_system]# mkdir web

[root@docker project_exam_system]# ls web/
dist
[root@docker project_exam_system]# ls web/dist/
assets  favicon.ico  index.html

(4)上传项目 dist

C:\Users\think book>scp -r E:\xxxx\dist\ root@192.168.8.168:~/project_exam_system/web/
[root@docker project_exam_system]# docker stop 243
243
[root@docker project_exam_system]# docker rm 243

(5)再创建一个容器,不映射端口

[root@docker web]# docker run -itd -p80:80 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html/ nginx:latest
46ffd2bf7face9ce7866af7d440f43f299c4c7d8d6c51444a0db602e162a1353
[root@docker web]# docker exec -it 46f ls /usr/share/nginx/html
assets    favicon.ico  index.html

(6)测试

登录异常,原因是后端没有部署

登陆的时候请求域名,我们是hosts域名劫持来实现

修改/etc/hosts

192.168.8.168 bu.yuanyu.zhangmin

1.2 后端业务
springboot 优点 不用单独部署tomcat,已经在springboot中部署tomcat

(1)准备拉取基础镜像

[root@docker project_exam_system]# docker pull centos

(2)创建容器

[root@docker ~]# docker run -it centos:latest  /bin/bash
[root@5fd07aadd6a6 /]# ls

bin  etc   lib      lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
(3)将在服务器上的java文件上传到容器中

 资源项目.war .properties

[root@docker ~]# docker cp jdk-17_linux-x64_bin.tar.gz 5fd:/
Successfully copied 183MB to 5fd:/
[root@docker ~]# docker cp application.properties 5fd:/
Successfully copied 4.1kB to 5fd:/
[root@docker ~]# docker cp Project_ExamSystem-V1.0.0.war 5fd:/
Successfully copied 41MB to 5fd:/

(4)对已经传到容器的文件进行部署

[root@docker ~]# docker attach 5fd
[root@5fd07aadd6a6 /]# ls

Project_ExamSystem-V1.0.0.war  lib64       sbin
application.properties           lost+found  srv
bin                   media       sys
dev                   mnt       tmp
etc                   opt       usr
home                   proc       var
jdk-17_linux-x64_bin.tar.gz    root
lib                   run
(4)创建jdk解压目录

[root@5fd07aadd6a6 /]# mkdir /usr/local/jdk
[root@5fd07aadd6a6 /]# tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/jdk/ --strip-components=1     //=1 :跳过一层目录

[root@5fd07aadd6a6 /]# ls /usr/local/jdk/
LICENSE  bin   include    legal  man
README     conf  jmods    lib    release

(5)修改applation.proerties文件

[root@5fd07aadd6a6 /]# vi application.properties 

spring.datasource.url=jdbc:mysql://192.168.8.168:3306/project_exam_system
spring.datasource.username=blt
spring.datasource.password=blt
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
(6)启动

[root@5fd07aadd6a6 /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war    ctrl+p+q
[root@docker ~]# curl 172.17.0.3:8080
{"code":20002,"msg":"账号不存在或密码错误"}

(7)根据容器生成镜像

[root@docker ~]# docker commit 5fd java:v0
[root@docker ~]# docker images

REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
java                        v0        21a2b56dffe3   21 seconds ago   774MB
centos                      yum       1bd5d7b13eed   2 days ago       272MB
nginx                       latest    5ef79149e0ec   2 weeks ago      188MB
[root@docker ~]# docker stop df
df
[root@docker ~]# docker rm 5f
df

(8)根据新建的镜像创建容器

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

[root@docker ~]# docker ps

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS                                       NAMES
f68d82c68dfe   java:v0   "/bin/bash"   5 minutes ago   Up 5 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   fervent_ganguly
[root@docker ~]# docker attach f6
[root@f68d82c68dfe /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war

1.3 数据持久化业务 mysql 5.7.44
(1)拉取mysql镜像

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

[root@docker ~]# docker images

REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
mysql                       5.7.44    5107333e08a8   8 months ago    501MB
(2)根据镜像制作容器,并映射端口

[root@docker ~]# docker run -itd -e MYSQL_ROOT_PASSWORD=root -p3306:3306 mysql:5.7.44
7dcf9b329a1abef12c82dbcf1d1eac9ce2b908ac84909490088a09e2611dadc8
[root@docker ~]# docker ps --all

CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS                      PORTS                                                  NAMES
7dcf9b329a1a   mysql:5.7.44   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds                0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   nice_gauss
(3)导出数据库文件

[root@docker ~]# docker cp 7dc:/var/lib/mysql project_exam_system/

C:\Users\think book>scp E:\xxx\project_exam_system.sql root@192.168.8.168:~/project_exam_system

[root@docker ~]# cd project_exam_system/
[root@docker project_exam_system]# ls
mysql  project_exam_system.sql  web

[root@docker project_exam_system]# mkdir mysql
[root@docker project_exam_system]# mv project_exam_system.sql mysql/

[root@docker project_exam_system]# head mysql/project_exam_system.sql 

create database if not exists project_exam_system charset utf8mb4;
use project_exam_system;
/*
 Navicat MySQL Data Transfer
 
 Source Server         : MySQL84
 Source Server Type    : MySQL
 Source Server Version : 80400
 Source Host           : localhost:3308
 Source Schema         : project_exam_system
(4)将sql上传到MySQL容器

[root@docker ~]# docker cp project_exam_system/mysql/project_exam_system.sql 7dc:/
Successfully copied 11MB to 7dc:/

(5)执行mysql文件

(6)使用exec指令访问数据库管理界面

[root@docker ~]# docker exec -it 7dc mysql -uroot -proot

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| project_exam_system |
| sys                 |
+---------------------+
5 rows in set (0.01 sec)
mysql> create user 'blt'@'%' identified by 'blt';
Query OK, 0 rows affected (0.00 sec)
 
mysql> grant all on *.* to 'blt'@'%';
Query OK, 0 rows affected (0.00 sec)
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 

(7)登录测试 

(8)Dockerfile优化

创建Java资源存放目录,并把所有资源文件移动到Java目录下

[root@docker ~]# mkdir project_exam_system/java
[root@docker ~]# mv jdk-17_linux-x64_bin.tar.gz  project_exam_system/java/
[root@docker ~]# mv application.properties project_exam_system/java/
[root@docker ~]# mv Project_ExamSystem-V1.0.0.war project_exam_system/java/

[root@docker ~]# tree -L 3 project_exam_system/

project_exam_system/
├── java
│   ├── application.properties
│   ├── jdk-17_linux-x64_bin.tar.gz
│   └── Project_ExamSystem-V1.0.0.war
├── mysql
│   └── project_exam_system.sql
└── web
    └── dist
        ├── assets
        ├── favicon.ico
        └── index.html
 
5 directories, 6 files
进入java目录解压jdk并改名

[root@docker ~]# cd project_exam_system/java/
[root@docker java]# tar -axvf jdk-17_linux-x64_bin.tar.gz 

[root@docker java]# mv jdk-17.0.12/ jdk    

编写.sh文件和Dockerfile文件

[root@docker java]# vim start.sh

#!/bin/bash
/usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war
  [root@docker java]# vim Dockerfile

FROM centos:latest
 
ADD application.properties /application.properties
 
ADD jdk/ /usr/local/jdk
 
ADD Project_ExamSystem-V1.0.0.war /Project_ExamSystem-V1.0.0.war
 
WORKDIR /
 
EXPOSE 8080
 
ADD start.sh /start.sh
 
RUN chmod -v +x /start.sh
 
CMD [ "start.sh","/bin/bash" ]

使用当前目录下的Dockerfile来构建一个名为java:v1的镜像

[root@docker java]# docker build -t java:v1 .

[root@docker java]# docker images

REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
java                        v1        5d3dda7a16e7   21 seconds ago   591MB
根据java:v1镜像创建容器

[root@docker java]# docker run -it -p8081:8080 java:v1 /bin/bash
[root@a3ab4be45e47 /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war 
[root@docker java]# docker exec a3a ss -anut | grep 8080

tcp   LISTEN 0      128                *:8080            *:*   

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

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

相关文章

安宝特科技 | AR眼镜在安保与安防领域的创新应用及前景

随着科技的不断进步,增强现实(AR)技术逐渐在多个领域展现出其独特的优势,尤其是在安保和安防方面。AR眼镜凭借其先进的功能,在机场、车站、海关、港口、工厂、园区、消防局和警察局等行业中为安保人员提供了更为高效、…

KinectFusion

1.KinectFusion 笔记来源: 论文地址:KinectFusion: Real-time 3D Reconstruction and Interaction Using a Moving Depth Camera* 项目地址:github/KinectFusion [1] 截断符号距离 | TSDF, Truncated Signed Distance Function 本篇对Kinec…

零跑C11 S01 T03 路特斯EMEYA繁花ELETRE启辰D60EVPLUS维修手册电路图资料更新

经过整理,零跑C11 S01 T03 路特斯EMEYA繁花ELETRE启辰D60EVPLUS已经更新至汽修帮手资料库内,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传…

tomcat redis minio nginx windows开机自启

tomcat 开机自启 命令 service.bat install 控制台输入 service.bat install 再到服务中去查看有没有注册成功,minio,redis,nginx 也是一样在服务里查看注册成功没 redis 开机自启 命令 redis-server.exe --service-install redis.windows.conf --loglevel ve…

CT转化MR图像的算法及模型解决

将CT(Computed Tomography)图像转化为MR(Magnetic Resonance)图像是一个复杂的图像处理任务,因为CT和MR图像是基于完全不同的物理原理获取的。CT图像主要反映组织的密度差异,而MR图像则反映组织的质子密度、…

python 遍历文件夹中的文件

上代码: import os# 设置要遍历的文件夹路径 folder_path utils# 遍历文件夹 for dirname, subdirs, files in os.walk(folder_path):print(fFound directory: {dirname})for file in files:print(f{os.path.join(dirname, file)} is a file)# 如果需要遍历子文件…

探索存储世界:TF卡与SD卡的奥秘

在这个数字化时代,数据存储变得至关重要。TF卡(TransFlash卡)和SD卡(Secure Digital卡)作为两种常见的存储介质,它们在我们的日常生活中扮演着重要角色。MK米客方德将带您深入了解TF卡的基本概念&#xff0…

netcore高级知识点,内存对齐,原理与示例

最近几年一直从事物联网开发,与硬件打交道越来越多,发现越接近底层开发对性能的追求越高,毕竟硬件资源相对上层应用来实在是太缺乏了。今天想和大家一起分享关于C#中的内存对齐,希望通过理解和优化内存对齐,可以帮助大…

深度学习模型量化方法

深度学习模型量化方法 (qq.com)

【hot100篇-python刷题记录】【回文链表】

R7-链表篇 思路: 转回文数组法 链表转数组,再使用双指针判断是不是回文数组即可。 wkao?!根本不用双指针判断是否回文数组,只需要倒序判断布尔值即可。(牛啊牛啊) # Definition for singly-linked list. # class…

LIN总线CAPL函数—— 更新特定报文数据(linUpdateResponse)

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

激光测距模组光轴调试怎么调

激光测距模组作为精密的测量工具,其光轴调试是确保测量精度的重要环节。正确调试光轴不仅能够提升测量的准确性,还能延长设备的使用寿命。以下将由鑫优威给大家详细介绍激光测距模组光轴调试的步骤及注意事项。 一、准备工作 在进行光轴调试前&#xff0…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-24 TPG图像测试数据发生器设计

软件版本:VIVADO2021.1 操作系统:WIN10 64bit 硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台:米联客-MLK-H3-CZ08-7100开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…

非标机械设计项目“规范”笔记

2.自动化设备开发特点与技术文件输出 2.1自动化设备 自动化设备 工业自动化设备类型:标准自动化、非标自动化 载具和治具 焊接治具---汽车行业用的多 压装、压合治具---3C行业 治具种类: 电木:测试治具箱体&#xf…

Mac系统App打包成dmg文件总结

使用软件:BetterZip 操作步骤如下: 打开BetterZip 将想要打包的App拖入当前界面 选中文件点击文件-另存为 修改保存位置和压缩格式,点击存储即可 保存完成后修改文件名即可

关联模块的查询列表勾选数据,新建带出勾选数据

在模块找到页面拓展,新建按钮,代码在链接目标地址中写 获取当前勾选数据的id,将ID拼接到弹窗地址上 var CheckedCheckboxId _xtable_CheckedCheckboxId();//勾选中的checkid var result CheckedCheckboxId.replace(/^,|,$/g, ""); window.ope…

哪种类型的耳机不伤耳朵?五款口碑绝佳机型安利!

​要说最不伤耳朵的耳机,那肯定得是开放式耳机了!开放式耳机现在超火,因为它们戴起来舒服,音质又棒,让喜欢音乐和运动的朋友们超爱。特别是那些边运动边听歌的人,开放式耳机简直是完美。它们戴着稳&#xf…

网站注册流程是怎样的

网站注册流程是一项关键的操作,对于用户来说,这是接触和利用公司服务的第一步。一个简单、清晰的注册流程能够提高用户体验,增强用户对公司的信任感。下面是一个通用的公司网站注册流程,以及一些设计原则,以确保注册过…

NB6L295M MCU 设计参考

NB6L295M 2.5V / 3.3V 双通道可编程时钟 / 数据差分 CML 的延迟输出多电平输入,带内部终端;NB6L295M 是一款双通道可编程延迟芯片主要用于 Clock 或 Data 去偏斜和定时调整。NB6L295M 在那两个单独的可变延迟通道 PD0 和 PD1 可以在以下之一中配置两种操…

基于PiAlert的网络扫描器NetAlertX

什么是 NetAlertX ? NetAlertX 是💻🔍 WIFI/LAN 入侵检测器。能扫描连接到您的网络的设备,并在发现新设备或未知设备时向您发出警报。能够在一个地方可视化您的所有网络,获得实时警报,并与您的智能家居无缝…