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應用
- 確保容器優雅啟動和退出
數據流與執行順序
構建階段流程
- 執行
docker-compose up
命令啟動部署 - Docker Compose解析docker-compose.yml配置
- 檢查ruoyi-app鏡像是否存在,不存在則構建
- 基于Dockerfile開始構建鏡像:
- 前端構建:Node.js環境下編譯Vue應用
- 后端構建:Maven環境下編譯Spring Boot應用
- 整合資源:將編譯結果合并到最終鏡像
- 構建參數流動:
- docker-compose.yml的args部分 → Dockerfile的ARG變量
- ARG變量 → 前端環境配置文件(.env.production)
運行階段流程
- 創建并啟動數據庫和Redis容器
- 創建并啟動應用容器,傳入環境變量
- 容器啟動執行docker-entrypoint.sh腳本
- 腳本處理環境變量并生成配置文件
- 啟動Java應用并加載生成的配置
- 環境變量流動:
- .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目錄
部署步驟
- 準備環境:安裝Docker和Docker Compose
- 創建配置:編寫.env文件設置環境特定參數
- 構建鏡像:運行
docker-compose build
- 啟動服務:運行
docker-compose up -d
- 驗證部署:訪問應用地址確認服務可用
- 查看日志:運行
docker-compose logs
監控運行狀態
常見問題與解決方案
-
數據庫連接失敗
- 檢查DB_HOST和DB_PASSWORD配置
- 確認數據庫容器健康狀態
-
Redis連接問題
- 如不需密碼,設置REDIS_PASSWORD為空值
- 檢查Redis容器運行狀態
-
BladeX認證失敗
- 驗證BladeX相關URL和憑據配置
- 確保BLADE_REDIRECT_URI能被公網訪問
-
鏡像構建失敗
- 檢查構建日志定位具體錯誤
- 確保網絡連接良好能下載依賴
這套Docker配置實現了開發與運行環境分離,使同一套代碼能在不同環境中無縫部署,只需通過環境變量調整具體參數,無需修改代碼。