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

学习记录: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 修到了第二天。

相关文章:

  • 【虚幻5蓝图Editor Utility Widget:创建高效模型材质自动匹配和资产管理工具,从3DMax到Unreal和Unity引擎_系列第二篇】
  • 【数据可视化-41】15年NVDA, AAPL, MSFT, GOOGL AMZ股票数据集可视化分析
  • 【数据可视化-42】杂货库存数据集可视化分析
  • 数据结构 -- 图的应用(二)
  • MinecraftPVP发展史
  • TypeScript之type
  • 轻松上手:使用 Docker Compose 部署 TiDB 的简易指南
  • 多模态革命!拆解夸克AI相机技术架构:如何用视觉搜索重构信息交互?(附开源方案对比)
  • 6.进程概念(中)
  • TCP vs UDP:核心区别、握手过程与应用场景(附对比图)
  • Git-基本操作
  • 人工智能数学基础(一):人工智能与数学
  • 什么是公共数据?公共数据开放后如何提高新质生产力发展?
  • SQL知识点合集---第二弹
  • 软考-软件设计师中级备考 5、数据结构 树和二叉树
  • 高级数据库对象全面解析:视图、存储过程与触发器
  • HTML5 WebSocket:实现高效实时通讯
  • 喷泉码技术在现代物联网中的应用的总结和参考文献
  • 人工智能数学基础(二):初等数学
  • UniApp 实现分享功能
  • 一季度我国服务进出口总额19741.8亿元,同比增长8.7%
  • 太好玩了!坐进大卫·霍克尼的敞篷车进入他画笔下的四季
  • 亮剑浦江丨上海网信部门处罚一批医疗服务类互联网企业,三大类问题值得关注
  • 日韩 “打头阵”与美国贸易谈判,汽车、半导体产业忧虑重重
  • 国家卫健委:工作相关肌肉骨骼疾病、精神和行为障碍成职业健康新挑战
  • 人社部:我国劳动力市场潜力足,韧性强