2024年8月30日(docker部署project-exam-system系统 并用Dockerfile构建java镜像)

news2024/9/20 20:41:18

一、回顾

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

        1. hostname

        2. https注释

9. ./prepare

10. ./installed

        1. 使用nginx发布web服务

        2. 使用registry管理

2.docker-compose的编排

        1. 在学习kubernetes之前的热身

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

        3. docker-compose.yml

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

二、项目:使用基础的docker指令来创建镜像,实现项目的发布

[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

拉取nginx

[root@docker ~]# docker pull nginx 

三、docker部署project-exam-system系统

1、背景:在一台主机之内实现容器的编排,发布考试系统
2、环境准备:

        1. 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"
        ]
}

        2. docker-compose

3、普通的部署

        1. 镜像

                前端:nginx latest服务

                        拉取nginx:latest镜像

                        测试

                        上传前端项目dist

                后端的业务: spring boot不能单独部署tomcat,已经在spring boot中内置tomcat

                        1. 准备拉取基础centos镜像

                        2. jdk17版本的文件

                        3. 项目资源.war .. perpreties

                        4. 将在服务器上的Java的资源文件上传到容器

                        5. 对已经上传到容器的文件进行部署 docker attach 57
                        6.  tar -xzvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/jdk/ --strip-components=1

                        7. 尝试启动

                数据持久化业务: MySQL5.7.44 

前端
(1)创建nginx容器

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

[root@docker ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                               NAMES
56c77a78a1c1   nginx:latest   "/docker-entrypoint.…"   40 seconds ago   Up 39 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   admiring_banach

[root@docker ~]# docker exec -it 56 ls /usr/share/nginx/html
50x.html  index.html

(2)创建一个目录,不单独放置前端的资料,把后端的资料也都放到这里

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

(3)上传文件

C:\Users\89765>scp -r "D:\青岛实训\project_exam_system\dist" root@192.168.8.196:~/project_exam_system/web/
[root@docker project_exam_system]# ls
web
[root@docker project_exam_system]# ls web/
dist
[root@docker project_exam_system]# ls web/dist/
assets  favicon.ico  index.html

(4)删除之前创建的nginx容器

[root@docker project_exam_system]# docker stop 56
56
[root@docker project_exam_system]# docker rm 56
56

(5)再创建容器,不止映射端口,还挂载目录

[root@docker project_exam_system]# docker run -itd -p80:80 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html/ nginx:latest

881bf9bd662746918396fc79254e0fde7fd382ab6c14973304f6069bea644619
[root@docker project_exam_system]# docker exec -it 88 ls /usr/share/nginx/html
assets    favicon.ico  index.html

(6)测试成功 

出现问题,在实现登录的时候,都实现后段异常,原因后段还没后部署

登录的时候请求的域名bu.yuanyu.zhangmin,我们是hosts域名劫持来实现

vi /etc/hosts
192.168.8.196 bu.yuanyu.zhangmin

sudo echo "192.168.8.196 bu.yuanyu.zhangmin" >> /etc/hosts
后端
(1)上传包

(2)创建容器

[root@docker ~]# docker run -it centos:latest /bin/bash
[root@573bb9975f03 /]# ls
bin  etc   lib      lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@573bb9975f03 /]# [root@docker ~]# 

(3)将在服务器上的Java的资源文件上传到容器

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

(4)进入容器

[root@docker ~]# docker attach 57

[root@573bb9975f03 /]# 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
(5)创建jdk解压目录

[root@573bb9975f03 /]# mkdir /usr/local/jdk

(6)解压jdk包

[root@573bb9975f03 /]# tar -xzvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/jdk/ --strip-components=1

(7)修改application.properties 文件

[root@573bb9975f03 /]# vi application.properties 

spring.datasource.url=jdbc:mysql://192.168.8.196:3306/project_exam_system  #本机IP地址 
spring.datasource.username=lxe 
spring.datasource.password=lxe
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
(8)尝试启动

[root@573bb9975f03 /]# /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":"账号不存在或密码错误"}[root@docker ~]# 

 

(9)根据容器57创建镜像

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

REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
java                        v0        b27ef2926644   6 seconds ago   774MB
(10)删除掉上面的57容器

[root@docker ~]# docker stop 57
57
[root@docker ~]# docker rm 57
57

(11)根据新建的镜像创建镜像

[root@docker ~]# docker run -itd -p8080:8080 java:v0 /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war 

[root@docker ~]# docker ps

CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS             PORTS                                       NAMES
7f42f4f5381a   java:v0        "/usr/local/jdk/bin/…"   6 seconds ago       Up 5 seconds       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   happy_hodgkin

[root@docker ~]# docker stop 7f
7f
[root@docker ~]# docker rm 7f
7f

(12)重新创建容器

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

CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS             PORTS                                       NAMES
2cd9c0255569   java:v0        "/bin/bash"               12 seconds ago      Up 12 seconds      0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   beautiful_haslett
881bf9bd6627   nginx:latest   "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:80->80/tcp, :::80->80/tcp           goofy_agnesi

[root@docker ~]# docker attach 2c  //将java容器的终端附加到当前终端
[root@2cd9c0255569 /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war  //启动spring boot微服务

MySQL
(1)拉取MySQL镜像

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

[root@docker ~]# docker images

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

CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS         PORTS                                                  NAMES
408f1e6cec5b   mysql:5.7.44   "docker-entrypoint.s…"   4 seconds ago   Up 4 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   pedantic_solomon
(3)向容器中上传文件 

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

Successfully copied 220MB to /root/project_exam_system/
(4)将mysql文件上传

C:\Users\89765>scp "D:\青岛实训\project_exam_system\project_exam_system.sql" root@192.168.8.196:~/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]# rm -rf mysql/
[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

(5)将sql文件上传到mysql容器中

[root@docker ~]# docker cp project_exam_system/mysql/project_exam_system.sql 40:/
Successfully copied 11MB to 40:/
[root@docker ~]# docker exec 40 ls
project_exam_system.sql


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

#由于在java的配置文件中,访问数据库的账号和密码不是root,而是lxe
 [root@docker ~]# docker exec -it 40 mysql -uroot -proot

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| project_exam_system |
| sys                 |
+---------------------+
5 rows in set (0.00 sec)
mysql> create user 'lxe'@'%' identified by 'lxe';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to 'lxe'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

4、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
├── mysql
│   └── project_exam_system.sql
└── web
    └── dist
        ├── assets
        ├── favicon.ico
        └── index.html

5 directories, 5 files

编写Dockerfile文件
[root@docker ~]# vim project_exam_system/java/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

ADD java.sh /java.sh

RUN chmod -v +x /java.sh

WORKDIR /

EXPOSE 8080

CMD [ "java.sh","/bin/bash" ]

进入到java资源目录中并解压jdk,并改名

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

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

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

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

[root@docker java]# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
java                        v1        541d15b51e02   58 seconds ago   591MB

[root@docker java]# vim java.sh 


#!/bib/bash
/usr/local/jdk/bin/java -jar Project_ExamSystem-v1.0.0.war

根据java:v1镜像创建容器

[root@docker java]# docker run -it -p8081:8080 java:v1 /bin/bash
[root@1ef5404323e8 /]# ls

Project_ExamSystem-V1.0.0.war  home       media  run    usr
application.properties           java.sh       mnt      sbin    var
bin                   lib       opt      srv
dev                   lib64       proc   sys
etc                   lost+found  root   tmp

[root@1ef5404323e8 /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war 
[root@docker java]# docker exec 1ef ss -anut| grep 8080

tcp   LISTEN 0      128                *:8080            *:*          

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

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

相关文章

向量、数量积、向量积

目录 一、向量的定义二、向量是有序的数字列表三、向量的基本分类四、向量的运算律五、向量的基本运算1、向量加法2、向量乘法(数乘)3、向量减法4、点积(内积或数量积)5、叉积(外积或向量积)6、向量的模&am…

RTA-OS Port Guide学习(一)-基于S32K324 OS

文章目录 前言OS Port的安装Port CharacteristicsParameters of ImplementationConfiguration ParametersStack used for C-startup(SpPreStartOS)Stack used when idle (SpStartOS)Stack overheads for ISR activation (SpIDisp)Stack overheads for ECC tasks (SpECC)Stack o…

LLM的范式转移:RL带来新的 Scaling Law

从几周前 Sam Altman 在 X 上发布草莓照片开始,整个行业都在期待 OpenAI 发布新模型。根据 The information 的报道,Strawberry 就是之前的 Q-star,其合成数据的方法会大幅提升 LLM 的智能推理能力,尤其体现在数学解题、解字谜、代…

<Rust>egui学习之小部件(三):如何为窗口UI元件设置布局(间隔、水平、垂直排列)?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第三篇博…

TWRP 使用帮助 第三方Recovery

简介 TWRP 是国外安卓爱好者开发的一款工具全称为:Team Win Recovery Project。是一个由Omnirom开源团队中的Dees Troy主导开发,旨在打造最完美第三方recovery的开源项目。目前主要由包括Dees Troy在内的4个人共同维护。 主要作用包括刷机、备份、救砖 …

C++判断语句(基础速通)ac-wing

倍数 #include <iostream> using namespace std; int a, b; int main() {cin >> a >> b;if (a % b 0 || b % a 0) cout << "Sao Multiplos";else cout << "Nao sao Multiplos";return 0; }零食 #include <iostream>…

通用后台管理系统实战演示(Vue3 + element-plus)汇总篇一

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

菜鸟笔记-001 如何用JavaScript脚本在文字中实现向左或向右插入空格

这是一个网友在线上问我的一个问题&#xff1a; 如何用JavaScript脚本在文字中实现向左或向右插入空格 下图是在文字左边插入了1/2个空格的效果&#xff1a; 那么如何用javascript 实现向左向右插入空格&#xff1f; 其实这个功能&#xff0c;我在实际工作确实很少碰到&#xf…

【王树森】RNN模型与NLP应用(5/9):多层RNN、双向RNN、预训练(个人向笔记)

Stacked RNN&#xff08;多层RNN&#xff09; 1. 原理 多个全连接层可以堆叠&#xff0c;多个卷积层也可以堆叠。同理&#xff1a;RNN也可以堆叠形成多层RNN。 如下图所示&#xff1a;对于每一个时刻的输出 h t h_t ht​&#xff0c;它既会作为下一个时刻的输入&#xff0c;…

【C++ 第十八章】C++11 新增语法(1)

1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合并…

2016年系统架构师案例分析试题五

目录 案例 【题目】 【问题 1】(10 分) 【问题 2】(6 分) 【问题 3】(9 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Scrum 敏捷开发过程的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 Scrum 是一个增量…

C语言典型例题57

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题4.9 判断整数是否为素数 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题4.9 判断整数是否为素数//【数学知识】素数&#xff1a;一个大于1的自然数&#xff0c;如果只…

我从obsidian 转入 语雀 了

遇到的问题倒是不多&#xff0c;这里记录一下&#xff1a; 1. wiki链接转markdown 用vscode打开ob工作区文件夹&#xff0c;利用正则表达式&#xff0c;替换链接 \[\[(.*?)\]\][$1](../_resources/$1) 我的图片都存在_resources文件夹里 其中ob的json&#xff0c;还有插件的…

JavaEE:多线程代码案例(定时器)

文章目录 定时器介绍Java标准库中的定时器定时器的实现 定时器 介绍 除了之前说过的单例模式,阻塞队列,线程池以外,定时器也是我们日常开发中常用的代码~ 定时器相当于"闹钟".在现实生活中,当闹钟响时,我们就需要去完成一些事情. 同理,在代码中,也经常需要"闹…

力扣406-根据身高重建队列(java详细题解)

题目链接&#xff1a;406. 根据身高重建队列 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法&#xff1a;局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优&…

【自用16.】C++类

类的构成 类的设计 代码demo #include <iostream> #include <Windows.h> #include <string>using namespace std;// 定义一个“人类” class Human { public: //公有的&#xff0c;对外的void eat(); //方法&#xff0c; “成员函数”void sleep();void …

从零开始搭建本地安全 AI 大模型攻防知识库

本文将系统分享从零开始搭建本地大模型问答知识库过程中所遇到的问题及其解决方案。 1 概述 目前&#xff0c;搭建大语言问答知识库能采用的方法主要包括微调模型、再次训练模型以及增强检索生成&#xff08;RAG&#xff0c;Retrieval Augmented Generation&#xff09;三种方…

51单片机-定时器介绍

时间&#xff1a;2024.8.31 作者&#xff1a;Whappy 目的&#xff1a;手撕51 代码&#xff1a; 现象&#xff1a;

【fastapi】fastapi的hello world

新建这样的目录结构 main.py的代码如下 from fastapi import FastAPI from fastapi.templating import Jinja2Templatesapp FastAPI()# 初始化 Jinja2 模板引擎 templates Jinja2Templates(directory"templates")app.get("/") async def home():contex…

AI编码新时代:免费人工智能助手Blackbox AI

前言&#xff1a; 在当今快速发展的科技时代&#xff0c;人工智能已经渗透到我们生活的方方面面&#xff0c;从智能手机的语音助手到智能家居控制系统&#xff0c;再到在线客服和个性化推荐算法&#xff0c;AI智能工具正变得越来越普遍。它们以其高效、智能和用户友好的特性&am…