學習記錄: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.pswp.cn/diannao/80837.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80837.shtml
英文地址,請注明出處:http://en.pswp.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…