vue3-springboot-mysql的docker部署

Docker配置原理與部署文檔

概述

本文檔詳細說明RuoYi-Vue與BladeX集成項目的Docker部署原理,包括配置文件的作用、相互關系及數據流動。通過三個核心配置文件(docker-compose.yml、Dockerfile和docker-entrypoint.sh),實現了應用的容器化部署和靈活配置。

配置文件職責

1. docker-compose.yml

主要職責: 定義完整的應用棧,編排多容器服務

  • 指定服務組件:應用程序(ruoyi-app)、數據庫(mysql)、緩存(redis)
  • 配置鏡像構建參數,傳遞給Dockerfile
  • 設置容器運行環境變量
  • 定義端口映射、卷掛載和服務依賴
  • 支持從.env文件或環境變量加載參數值

2. Dockerfile

主要職責: 定義應用鏡像的構建過程

  • 采用多階段構建策略,減小最終鏡像體積
  • 第一階段(frontend-build):編譯Vue前端應用
  • 第二階段(backend-build):編譯Spring Boot后端應用
  • 最終階段:整合前后端資源,配置運行環境
  • 接收構建參數(ARG),動態生成前端環境配置
  • 設置容器啟動入口點(docker-entrypoint.sh)

3. docker-entrypoint.sh

主要職責: 容器啟動初始化和應用配置生成

  • 處理環境變量,設置默認值
  • 動態生成后端應用配置文件(application-docker.yml)
  • 使用正確的配置啟動Java應用
  • 確保容器優雅啟動和退出

數據流與執行順序

構建階段流程

  1. 執行docker-compose up命令啟動部署
  2. Docker Compose解析docker-compose.yml配置
  3. 檢查ruoyi-app鏡像是否存在,不存在則構建
  4. 基于Dockerfile開始構建鏡像:
    • 前端構建:Node.js環境下編譯Vue應用
    • 后端構建:Maven環境下編譯Spring Boot應用
    • 整合資源:將編譯結果合并到最終鏡像
  5. 構建參數流動:
    • docker-compose.yml的args部分 → Dockerfile的ARG變量
    • ARG變量 → 前端環境配置文件(.env.production)

運行階段流程

  1. 創建并啟動數據庫和Redis容器
  2. 創建并啟動應用容器,傳入環境變量
  3. 容器啟動執行docker-entrypoint.sh腳本
  4. 腳本處理環境變量并生成配置文件
  5. 啟動Java應用并加載生成的配置
  6. 環境變量流動:
    • .env文件/環境變量 → docker-compose.yml的environment部分
    • environment值 → 容器環境變量
    • 容器環境變量 → docker-entrypoint.sh變量
    • 腳本變量 → 生成的application-docker.yml
    • 配置文件 → Spring應用配置

配置機制詳解

環境變量替換語法

docker-compose.yml使用${VARIABLE:-default}語法,實現靈活配置:

  • 嘗試讀取名為VARIABLE的環境變量值
  • 如環境變量不存在或為空,使用冒號后的默認值
  • 例:${DB_PASSWORD:-password},若未設置DB_PASSWORD則使用"password"

多階段構建優化

Dockerfile采用多階段構建,優化鏡像大小和構建效率:

  • 依賴安裝與代碼編譯分離,利用Docker緩存機制
  • 只復制必要的編譯結果到最終鏡像
  • 使用輕量級基礎鏡像運行應用,減小體積

配置文件動態生成

entrypoint腳本通過Here Document語法生成配置:

cat > /app/config/application-docker.yml << EOF
spring:datasource:url: jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}
EOF
  • 將環境變量值插入模板中
  • 支持復雜的多行配置生成
  • 生成的配置文件由Spring Boot應用加載

部署配置說明

必要配置項

最小化配置需要設置以下環境變量:

  • 數據庫連接:DB_HOST, DB_PASSWORD
  • 應用地址:API_URL, BLADE_REDIRECT_URI
  • BladeX連接:BLADE_AUTH_URL, BLADE_CLIENT_ID, BLADE_CLIENT_SECRET

數據持久化

通過卷掛載實現數據持久化:

  • 數據庫數據:mysql-data卷
  • Redis數據:redis-data卷
  • 用戶上傳文件:./uploadPath目錄
  • 應用日志:./logs目錄

部署步驟

  1. 準備環境:安裝Docker和Docker Compose
  2. 創建配置:編寫.env文件設置環境特定參數
  3. 構建鏡像:運行docker-compose build
  4. 啟動服務:運行docker-compose up -d
  5. 驗證部署:訪問應用地址確認服務可用
  6. 查看日志:運行docker-compose logs監控運行狀態

常見問題與解決方案

  1. 數據庫連接失敗

    • 檢查DB_HOST和DB_PASSWORD配置
    • 確認數據庫容器健康狀態
  2. Redis連接問題

    • 如不需密碼,設置REDIS_PASSWORD為空值
    • 檢查Redis容器運行狀態
  3. BladeX認證失敗

    • 驗證BladeX相關URL和憑據配置
    • 確保BLADE_REDIRECT_URI能被公網訪問
  4. 鏡像構建失敗

    • 檢查構建日志定位具體錯誤
    • 確保網絡連接良好能下載依賴

這套Docker配置實現了開發與運行環境分離,使同一套代碼能在不同環境中無縫部署,只需通過環境變量調整具體參數,無需修改代碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78842.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78842.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78842.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第十二天 使用Unity Test Framework進行自動化測試 性能優化:Profiler分析、內存管理

前言 在完成游戲核心功能開發后,如何確保項目質量并成功發布到各大平臺?本文將從自動化測試到商店上架,手把手教你構建完整的游戲開發閉環。使用Unity 2022 LTS版本進行演示,所有代碼均經過實際項目驗證。 一、自動化測試實戰(Unity Test Framework) 1.1 測試框架搭建 …

【專題四】前綴和(3)

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的基礎算法學習以及LeetCode刷題記錄&#xff0c;按專題劃分每題主要記錄&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代碼&#xff1b;&#xff08;2&#xff09;優質解法 優質代碼&#xff1b;&#xff…

深度解析:TextRenderManager——Cocos Creator藝術字體渲染核心類

一、類概述 TextRenderManager 是 Cocos Creator 中實現動態藝術字體渲染的核心單例類。它通過整合資源加載、緩存管理、異步隊列和自動布局等功能&#xff0c;支持普通字符模式和圖集模式兩種渲染方案&#xff0c;適用于游戲中的動態文本&#xff08;如聊天內容、排行榜&…

【漫話機器學習系列】229.特征縮放對梯度下降的影響(The Effect Of Feature Scaling Gradient Descent)

特征縮放對梯度下降的影響&#xff1a;為什么特征標準化如此重要&#xff1f; 在機器學習和深度學習中&#xff0c;梯度下降是最常用的優化算法之一。然而&#xff0c;很多人在訓練模型時會遇到收斂速度慢、訓練不穩定的問題&#xff0c;其中一個重要原因就是特征未進行適當的…

【神經網絡與深度學習】批標準化(Batch Normalization)和層標準化(Layer Normalization)

引言 在深度學習中&#xff0c;標準化技術&#xff08;Normalization&#xff09;是提高神經網絡訓練效率和性能的重要工具。其中&#xff0c;批標準化&#xff08;Batch Normalization, BN&#xff09;和層標準化&#xff08;Layer Normalization, LN&#xff09;是兩種常用的…

OpenHarmony之電源管理子系統公共事件定義

OpenHarmony之電源管理子系統公共事件定義 電源管理子系統面向應用發布如下系統公共事件&#xff0c;應用如需訂閱系統公共事件&#xff0c;請參考公共事件接口文檔。 COMMON_EVENT_BATTERY_CHANGED 表示電池充電狀態、電平和其他信息發生變化的公共事件的動作。 值&#x…

linux 環境下 c++ 程序打印 core dump 信息

linux 信號機制 軟中斷信號 Signal&#xff0c;簡稱信號&#xff0c;用來通知進程發生了異步事件&#xff0c;進程之間可以互相通過系統調用 kill 等函數來發送軟中斷信號。內核也可以因為內部事件而給進程發送信號&#xff0c;通知進程發生了某個事件。 進程對信號的處理 進…

Qt開發環境的安裝與問題的解決(2)

文章目錄 1. Qt開發環境安裝的說明2. 通過安裝包進行安裝3. 通過在線下載程序 解決問題下載 https....網路錯誤問題解決開始安裝--第一部分開始安裝--第二部分 4. 建議配置環境變量&#xff08;非必須&#xff09;配置環境變量的意義 簡介&#xff1a;這篇文章主要分享Qt開發環…

【每日EDA行業分析】2025年4月25日

深度總結&#xff1a;EDA 軟件行業現狀與發展趨勢 一、引言 在半導體產業的復雜生態中&#xff0c;EDA 軟件宛如一顆閃耀的明珠&#xff0c;它是集成電路設計的核心工具&#xff0c;貫穿芯片從設計構思到最終封裝測試的全流程&#xff0c;其重要性不言而喻&#xff0c;被譽為…

flutter實踐:比例對比線圖實現

需求&#xff1a;flutter實現一個左右對比線圖,帶有動畫效果 效果圖&#xff1a; Widget _buildTop() {return Container(height: themeData.heightXl,padding: EdgeInsets.symmetric(horizontal: themeData.hSpacingMd),child: Row(mainAxisAlignment: MainAxisAlignment.spa…

測試基礎筆記第十五天

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、集合1.集合的定義二、使用集合列表去重 導包二、函數1.函數介紹2.定義函數3.調用函數4.函數實現登錄案例5.函數的返回值 三、模塊和包1.模塊的概念(Module)2.模…

Linux中的shell腳本練習

1.判斷字符串是否為空 #!/usr/bin/bash while : #:默認值為真 do read -p "請輸入你的密碼: " a pass123456 if [ -z $a ];thenecho "您輸入的密碼不能為空"exit 1 elseif [ $a $pass ];thenecho "登錄成功"breakelseecho "您的密碼輸入有…

使用命令關閉Redis服務端

使用命令關閉Redis服務端。 命令 redis-cli -a 111111 -p 6379 shutdown 有些人redis的端口不是6379&#xff0c;那就自己查一下 參數解釋&#xff1a; -a&#xff1a;Redis密碼 -p&#xff1a;Redis端口 shutdown&#xff1a;關閉命令

嵌入式RTOS實戰:uC/OS-III最新版移植指南(附項目源碼)

文章目錄 前言一、uC/OS簡介二、工程移植2.1 下載ucos源碼2.2 創建空白工程2.3 拷貝ucosiii源碼文件2.3.1 UC-CONFIG2.3.2 UC-CPU2.3.3 UC-LIB2.3.4 UC-OS3 2.3 添加工程文件分組及路徑2.4 代碼首次編譯2.5 源碼修改2.5.1 cpu_cfg.h2.5.2 os_cpu_c.c2.5.3 lib_cfg.h2.5.4 sys.h…

TypeScript中的函數類型定義與類型約束

函數類型定義與類型約束 一、核心概念&#xff1a;類型別名與函數類型 1. 類型別名&#xff08;Type Alias&#xff09; 定義 類型別名使用 type 關鍵字為現有類型創建一個新名稱&#xff0c;可以用于&#xff1a; 基礎類型&#xff08;如 string、number&#xff09;&…

相機DreamCamera2錄像模式適配尺寸

在開發中遇到 一個問題&#xff0c;相機切換視頻模式時&#xff0c;預覽時&#xff0c;界面不能充滿屏幕兩側有黑邊&#xff0c;客戶要求修改&#xff0c;在此記錄 一問題現象&#xff1a; 系統相機在視頻模式下預覽時如下現象如圖1&#xff0c;期望現象如圖2: 圖1 …

SpringCloud組件——Gateway

一.網關 1.問題提出 我們通過Eureka&#xff0c;Nacos解決了服務注冊&#xff0c;服務發現的問題&#xff0c;使用SpringCloud LoadBalance解決了負載均衡的問題&#xff0c;使用OpenFeign解決了遠程調用的問題。 但是當前所有微服務的接口都是直接對外暴露的&#xff0c;可…

C#中構造器及屬性的加載順序

一.基本原則: 先加載靜態構造函數和靜態字段,后加載普通構造函數和普通字段;先加載基類再加載子類; 二.具體的加載順序: 父類靜態字段--->父類靜態構造函數--->子類靜態字段--->子類靜態構造函數--->父類實例字段---> 父類實例構造函數--->子類實例字段-…

Python面試問題

一、Python 基礎 1. Python 的特點 動態類型&#xff1a;變量無需聲明類型。解釋型語言&#xff1a;逐行解釋執行。支持多種編程范式&#xff08;面向對象、函數式、過程式&#xff09;。 2. 列表&#xff08;List&#xff09;與元組&#xff08;Tuple&#xff09;的區別 特…

計算機視覺進化論:YOLOv12、YOLOv11與Darknet系YOLOv7的微調實戰對比

摘要 YOLO系列作為實時目標檢測領域的重要里程碑&#xff0c;持續引領速度與精度的平衡發展。本文圍繞YOLOv7&#xff08;基于Darknet框架&#xff09;、YOLOv11及YOLOv12&#xff0c;系統、深入地對比了三款模型的架構創新、微調策略、核心技術及應用場景。我們詳細解析了三者…