当前位置: 首页 > ds >正文

学习记录: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.xdnf.cn/news/2738.html

相关文章:

  • AI在Java中的场景面试题深度解析
  • 从外卖大战看O2O新趋势:上门私厨平台系统架构设计解析
  • kalibr:相机模型
  • 8.Three.js中的 StereoCamera 立体相机详解+示例代码
  • 第十三章-PHP MySQL扩展
  • 处理对象集合,输出Map<String, Map<String, List<MyObject>>>格式数据,无序组合键处理方法
  • Android学习总结之Java篇(一)
  • 记一次pdf转Word的技术经历
  • Mioty|采用报文分割(Telegram Splitting)以提高抗干扰能力的无线通信技术
  • elasticsearch底层模块解析与实践系列
  • 基于大模型的胆总管结石全流程预测与临床应用研究报告
  • 基于 SpringBoot 与 Redis 的缓存预热案例
  • 【计算机视觉】CV实战项目-高分辨率遥感图像语义分割:High-Resolution-Remote-Sensing-Semantic-Segmentation
  • 《Vue3学习手记6》
  • 人工智能期末复习1
  • Java8 后接口的用法总结
  • 「Mac畅玩AIGC与多模态04」开发篇01 - 创建第一个 LLM 对话应用
  • 深入理解布隆过滤器:参数设定与优化
  • EXCEL常用函数公式和VBA汇总第二篇
  • CUDA Stream 回调函数示例代码
  • 迷你世界UGC3.0脚本Wiki二维表介绍介绍
  • NodeJs模块化与JavaScript的包管理工具
  • 快手极速版安卓版流量消耗与观看体验优化评测
  • JAVA数据结构
  • (即插即用模块-特征处理部分) 四十二、(2024 TPAMI) FreqFusion 频率特征融合
  • Nginx的默认主配置文件 “/etc/nginx/nginx.conf“ 解读
  • SQL Server 存储过程开发手册
  • 2025系统架构师---主程序/子程序架构风格
  • 小白学习java第16天(上): javaWeb
  • 【Redis】基础3:一些应用场景