学习记录:DAY19

Docker 部署与项目需求分析

前言

人总是本能地恐惧未知,令生活陷入到经验主义的循环之中。但我们终将面对。今天的目标是把 Docker 部署学完,然后对项目进行需求分析。

日程

  • 下午 4:30:Docker 部署项目部分学完了,做下笔记。
  • 晚上 6:30:对项目进行需求分析。

学习记录

学习内容

省流

  1. Docker 自定义镜像
  2. Docker 网络
  3. Docker Compose
  4. 关于二轮项目的需求分析

1. Docker 自定义镜像

准备一个 Docker 镜像,通常需要以下几个部分:

  • 系统运行环境
  • 相关的依赖和程序
  • 运行脚本

Dockerfile 提供了用于构建镜像的指令,如下表所示:

指令说明示例
FROM指定基础镜像FROM centos:7
ENV设置环境变量,可在后面指令使用ENV key=value
COPY拷贝本地文件到镜像的指定目录COPY ./jdk17.tar.gz /tmp
RUN执行 Linux 的 shell 命令,一般是安装过程的命令RUN tar -zxvf /tmp/jdk17.tar.gz
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080
ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar

注意:Dockerfile 的文件名称就叫 Dockerfile

示例
# 使用 CentOS 7 作为基础镜像
FROM centos:7# 添加 JDK 到镜像中
COPY jdk17.tar.gz /usr/local/
RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ &&  rm /usr/local/jdk17.tar.gz# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk-17.0.10
ENV PATH=$JAVA_HOME/bin:$PATHENV OSS_ACCESS_KEY_ID=LTAI5tP6dc4cvccdvvySE39X
ENV OSS_ACCESS_KEY_SECRET=ZSyIT31qhxIkS0dH1H9WzHqPiyM3Ot# 统一编码
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8# 创建应用目录
RUN mkdir -p /tlias
WORKDIR /tlias# 复制应用 JAR 文件到容器
COPY  tlias.jar  tlias.jar# 暴露端口
EXPOSE 8080# 运行命令
ENTRYPOINT ["java","-jar","/tlias/tlias.jar"]

执行以下语句来构建镜像:

docker build -t myImage:1.0 .

注意:末尾的 . 是指定 Dockerfile 所在的目录,在当前目录则为 .

2. Docker 网络

默认情况下,Docker 给所有的容器提供了默认的 bridge 网桥来实现相互沟通。但是因为容器的 IP 地址分配是不固定的,这导致我们在部署项目时有不必要的麻烦。在自定义的网络下,容器可以通过容器名代替 IP 地址来相互访问。

Docker 网络命令
命令说明
docker network create创建一个网络
docker network ls查看所有网络
docker network rm删除指定网络
docker network prune清除未使用的网络
docker network connect使指定容器连接加入某网络
docker network disconnect使指定容器连接离开某网络
docker network inspect查看网络详细信息
示例

创建一个网络:

docker network create netcat

在创建容器时设置连接到该网桥:

docker run -d --name myapp -p 8080:8080 --network netcat app:1.0

或者将一个现存容器加入到该网桥(使用该方法时,容器仍然保留原来的默认网桥连接):

docker network connect netcat myapp

3. Docker Compose

通过配置 docker-compose.yml 文件来实现多个关联的 Docker 容器的快速部署。

Docker Compose 指令
docker compose 【Options】【Commands】
类型参数或指令说明
Options-f指定 compose 文件的路径和名称
-p指定 project 名称
Commandsup创建并启动所有 service 容器
down停止并移除所有容器、网络
ps列出所有启动的容器
logs查看指定容器的日志
stop停止容器
start启动容器
restart重启容器
top查看运行的进程
docker-compose.yml 文件示例
services:mysql:image: mysql:8container_name: mysqlports:- "3307:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "/usr/local/app/mysql/conf:/etc/mysql/conf.d"- "/usr/local/app/mysql/data:/var/lib/mysql"- "/usr/local/app/mysql/init:/docker-entrypoint-initdb.d"networks:- tlias-nettlias:build: context: .dockerfile: Dockerfilecontainer_name: tlias-serverports:- "8080:8080"networks:- tlias-netdepends_on:- mysqlnginx:image: nginx:1.20.2container_name: nginx-tliasports:- "80:80"volumes:- "/usr/local/app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"- "/usr/local/app/nginx/html:/usr/share/nginx/html"depends_on:- tliasnetworks:- tlias-netnetworks: #指定网络tlias-net:name: itheima

在当前目录下创建容器并后台启动:

docker compose up -d

4. 关于二轮项目的需求分析

注意:只关注需要实现的模块,其他的数据从数据调用即可。

1)学生模块
  • 课程页面:可以显示习题总数、简单介绍以及完成情况,有一个按钮跳转到对应的练习列表。
  • 练习列表:显示练习名称、题数、总分(自己获得的)、截止时间、已完成题数、练习状态。查看详情时进入到做题页面。
  • 做题界面
    • 进入一道题后,如果已经提交过,会显示上一次提交的记录。
    • 提交答案按钮,点击提交后跳转回练习列表,更新答题情况。
    • 提交过后展示已提交过的答案和正确答案,不能再修改/提交答案。
2)教师模块
  • 管理练习功能
    • 以表格形式展示,练习名称、课程名称、班级名称模糊查询。
    • select 框选择学期。
    • 每一个练习有 3 种状态:未开始、进行中、已结束。
    • 可以修改、添加练习。
  • 添加练习功能
    • 下拉框选择,课程单选,班级可多选。
    • 管理员的练习名称可以重复。
    • 单教师、单学期对于一个班级的练习名称不可重复。
    • 可以自己添加题目,或者从题库选择。
  • 修改练习功能:对添加练习功能 + 查询回显即可。
  • 复用练习
    • 自动沿用该练习的题目。
    • 作业名称、课程、班级重新输入。
  • 应当注意到的层次结构:课程 -> 练习 -> 题目。
  • 添加题目
    • 表格形式。
    • 单选栏:选择题/简答题。
    • 题目描述、难度、题干、答案。
    • 确定/返回。
  • 从题库添加题目
    • 选择题库 -> 可多选题目。
    • 添加/返回。
  • 批改练习页面
    • 展示 table:学生姓名、学号、题干信息(总分值)、题 1,题 2…题 n 情况。
    • 人工批改简单题部分。
    • 表格显示班级、学号、姓名、完成题数、总分、各题批改情况/完成情况。
    • 对应题目一栏,显示提交情况:未/已提交,已批改(显示分数)。
    • 已提交 -> 题目的情况(题干信息、标准答案、学生答案),批改分数,评分,备注,确定/返回。
    • 已批改 -> 批改情况。
    • 未提交(考虑向学生发送提醒,可不做)。
进阶需求
  • Maven 分模块化构建项目。
  • 完成数据库连接池,支持动态扩缩容(c3p0、druid)(并发安全(hard))。
  • 后端以多线程模式运行,保证并发安全。
  • SQL 构建器 + 自定义 SQL,高兼容性的结果映射。
  • DispatcherController 来统一接收数据,并转发给路径给对应 Controller 处理。
  • 自定义异常抛出,全局异常处理器,过滤器。
  • 输出日志文件。
  • 将常量配置转移到 yml 配置文件。
  • 统一接收 JSON 格式数据,对数据进行混合加密(RSA + AES)。
  • 通过依赖注入(DI)进行控制反转(IOC),使用全局上下文进行全局对象的对象间依赖注入(使用注解)。
  • 实现 AOP 动态代理。
  • 判题机制,可以运行 C++ 代码。
  • Nginx 部署前端 + Docker 容器技术。
  • 将项目部署到公网。

注意:二轮考核截止时间:5 月 22 日。

方针:截至五一结束之前,尽可能多地完成进阶部分的功能(甚至只需要留 10 天来完成,不过考虑到还要上课、比赛等情况,留足至少 12 天是比较稳妥的)。

结语

结果因为修 bug 修到了第二天。

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

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

相关文章

Jackson 使用方法详解

Jackson 是 Java 生态中最流行的 JSON 处理库,也是 Spring Boot 的默认 JSON 解析器。它提供了高性能的 JSON 序列化(对象 → JSON)和反序列化(JSON → 对象)功能。以下是 Jackson 的全面使用指南。 1. 基础依赖 Mave…

【网络入侵检测】基于源码分析Suricata的统计模块

【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。 1. 概要 👋 在 Suricata 的配置文件中,stats 节点用于配置统计信息相关的参数,它的主要作用是控制 Suricata 如何收集和输出统计数据,帮助用户了解 Suricata 的运行状态和…

回归预测 | Matlab实现DBO-LightGBM蜣螂算法优化轻量级梯度提升机多输入单输出回归预测,作者:机器学习之心

回归预测 | Matlab实现DBO-LightGBM蜣螂算法优化轻量级梯度提升机多输入单输出回归预测,作者:机器学习之心 目录 回归预测 | Matlab实现DBO-LightGBM蜣螂算法优化轻量级梯度提升机多输入单输出回归预测,作者:机器学习之心预测效果…

风力发电领域canopen转Profinet网关的应用

在风力发电领域,开疆canopen转Profinet网关KJ-PNG-205的应用案例通常涉及将风力涡轮机内部的CANopen网络与外部的Profinet工业以太网连接起来。这种转换网关允许风力发电场的控制系统通过Profinet协议收集和监控涡轮机的状态信息,同时发送控制命令。 风力…

因特网和万维网

本文来源 :腾讯元宝 因特网(Internet)和万维网(World Wide Web,简称WWW)是紧密相关但完全不同的两个概念,它们的核心区别如下: 本质不同​​ ​​因特网(Internet&#…

Visual Studio 技能:调整软件界面布局

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:Windows编程:在VS2019里面,调整代码字体大…

LeetCode 热题 100_最小路径和(92_64_中等_C++)(多维动态规划)

LeetCode 热题 100_最小路径和(92_64) 题目描述:输入输出样例:题解:解题思路:思路一(多维动态规划): 代码实现代码实现(思路一(多维动态规划&…

Sql刷题日志(day6)

一、笔试 1、insert ignore:在插入数据时忽略主键冲突或其他唯一性约束冲突。 如果插入的记录会导致主键冲突(如 actor_id 已存在),该语句不会报错,而是直接忽略插入操作 语法: INSERT IGNORE INTO tab…

Java多线程入门案例详解:继承Thread类实现线程

本文通过一个简单案例,讲解如何通过继承 Thread 类来实现多线程程序,并详细分析了代码结构与运行机制。 一、前言 在 Java 中,实现多线程主要有两种方式: 继承 Thread 类 实现 Runnable 接口 本文以继承 Thread 类为例&#x…

Netty在线客服系统落地方案

本文不讲然后代码方面的东西,只聊方案!! 这方案基于 Spring Boot 2.6、Netty、MyBatis Plus、Redis 构建的一套支持 单体应用 的在线客服系统。 系统支持客户自由与后台客服实时聊天、客服未在线钉钉提醒通知客服、消息已读未读标记、消息已…

SDK游戏盾、高防IP、高防CDN三者的区别与选型指南

在网络安全防护领域,SDK游戏盾、高防IP和高防CDN是常见的解决方案,但各自的功能定位、技术实现和适用场景差异显著。本文将通过对比核心差异,帮助您快速理解三者特点并选择适合的防护方案。 一、核心功能定位 SDK游戏盾 功能核心&#xff1a…

GRPO有什么缺点,如何改进?

一、GRPO的核心原理与设计目标 Group Relative Policy Optimization(GRPO)是DeepSeek团队提出的一种强化学习算法,旨在解决传统PPO(Proximal Policy Optimization)在大语言模型(LLM)训练中的资源消耗问题。其核心创新在于 通过组内相对奖励替代价值函数(Critic Model)…

登高架设作业指的是什么?有什么安全操作规程?

登高架设作业是指在高处从事脚手架、跨越架架设或拆除的作业。具体包括以下方面: 脚手架作业 搭建各类脚手架,如落地式脚手架、悬挑式脚手架、附着式升降脚手架等,为建筑施工、设备安装、高处维修等作业提供安全稳定的工作平台。对脚手架进行…

前端实现商品放大镜效果(Vue3完整实现)

前端实现商品放大镜效果(Vue3完整实现) 前言 在电商类项目中,商品图片的细节展示至关重要。放大镜效果能显著提升用户体验,允许用户在不跳转页面的情况下查看高清细节。本文将基于Vue3实现一个高性能的放大镜组件,完整…

【C++11特性】Lambda表达式(匿名函数)

一、函数对象 在C中,我们把所有能当作函数使用的对象当作函数对象。 一般来说,如果我们列出一个对象,而它的后面又跟有由花括号包裹的参数列表,就像fun(arg1, arg2, …),这个对象就被称为函数对象。函数对象大致可分为…

大模型在肝硬化腹水风险预测及临床方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、肝硬化及大模型相关理论基础 2.1 肝硬化概述 2.2 大模型技术原理 2.3 大模型在医疗领域的应用现状 三、大模型预测肝硬化腹水术前风险 3.1 术前风险因素分析 3.2 大模型预测术前…

MCP:如何通过模型控制推理助力AI模型实现“深度思考”?

MCP:如何通过模型控制推理助力AI模型实现“深度思考”? | Echo_Wish专栏 大家好,我是Echo_Wish,一个在人工智能和Python领域深耕的技术达人。今天咱们聊一个相对前沿的技术话题——MCP (Model Control Propagation),它是如何帮助AI模型“深度思考”,让机器变得更加智能的…

c++初识

C 基础入门 本人写了很多c的服务器和客户端代码,这篇文章主要是想帮助初学者快速入门c.这样就能快速阅读我的源码,其实不难c只是比c多了些特性,其实不难,你们就理解为有更多的方式修改函数和调用函数的方式和重写函数 C 基础入门…

JVM 生产环境问题定位与解决实战(八):实战篇——正则表达式回溯引发的CPU 100%

本文已收录于《JVM生产环境问题定位与解决实战》专栏,完整系列见文末目录 1. 引言 在上一篇文章中,我们深入剖析了OSSClient泄漏引发的FullGC风暴全链路排查过程。本文聚焦另一个经典线上问题——正则表达式回溯导致的CPU 100%。在Java应用中&#xff0…

100天精通Python挑战总览 | 零基础到应用实战!

目录 ✨ 为什么发起100天挑战?✨整体学习路线规划第一阶段|基础篇(第1天 - 第50天)第二阶段|应用篇(第51天 - 第100天)Web开发篇爬虫篇数据分析篇AI入门篇 🏆为什么这么划分&#xf…