Docker 整合
專案現況
現在專案已經完成,需要使用 Docker 容器化。
後端伺服器和資料庫已經由主管協助建立好 Docker 映像檔,我要做的是:
將前端也用 Docker 容器化
把前後端、資料庫用同一個 docker-compose 設定檔合併起來部署
驗證整合後的功能是否正常
目前前端和後端各有一個獨立的程式碼儲存庫 (repository),所以有兩種整合方案。
整合方案
方法 1:創建一個新的整合專案
創建一個新的 Git 儲存庫,專門用於 Docker 整合:
voting-system-docker/
├── docker-compose.yml
├── voting-system-be/ (從原始儲存庫克隆或複製)
└── voting-system-fe/ (從原始儲存庫克隆或複製)
優點:
保持前後端程式碼儲存庫的獨立性,開發團隊可以各自維護
不影響現有的開發工作流程
部署專案與開發專案分離,架構更清晰
缺點:
需要管理額外的一個儲存庫
需要在部署時複製或克隆程式碼
方法 2:擴展其中一個現有儲存庫
選擇一個現有的儲存庫(通常是後端),將整合配置添加到其中:
voting-system-be/
├── docker-compose.yml (包含前後端和資料庫)
├── backend-code/ (後端程式碼)
└── frontend-code/ (可能是子模組或直接複製)
優點:
減少需要管理的儲存庫數量
更簡單的部署流程
缺點:
可能會混淆原始儲存庫的邊界
需要解決前端程式碼如何引入的問題
經過與主管討論,決定採用方法 1:建立一個獨立資料夾存放 Docker 設定檔,克隆前後端專案的程式碼,並各自以原本的方式管理版本控制。
程式碼同步方法
當前後端程式碼各自更新時,如何讓整合專案的程式碼保持同步?
方法 1:手動同步(最簡單但需要手動操作)
當原始儲存庫有更新時,需要手動進入整合目錄中的相應子目錄,然後拉取最新的程式碼:
cd voting-system-docker/voting-system-fe
git pull origin main
cd ../voting-system-be
git pull origin main
方法 2:使用 Git 子模組(更自動化但設置較複雜)
Git 子模組允許你在一個 Git 儲存庫中包含另一個 Git 儲存庫。這樣可以明確指向特定版本的原始程式碼:
# 在整合目錄中設置子模組
git submodule add [前端儲存庫 URL] voting-system-fe
git submodule add [後端儲存庫 URL] voting-system-be
# 更新子模組到最新版本
git submodule update --remote
方法 3:使用簡單的腳本自動化同步
可以創建一個簡單的腳本來自動化同步流程:
#!/bin/bash
# 更新前端
cd voting-system-fe
git pull origin main
cd ..
# 更新後端
cd voting-system-be
git pull origin main
cd ..
# 重新建構和啟動容器
docker-compose down
docker-compose up -d --build
同步方法比較:Git 子模組 vs. 腳本 + 一般克隆
Git 子模組方法
優點:
更正式的 Git 整合方式
可以精確控制每個子模組的版本
子模組更新是主專案版本控制的一部分
缺點:
設置和理解較複雜
團隊所有成員需要了解子模組的使用方式
有時更新流程不直觀
腳本 + 一般克隆方法
優點:
設置簡單,容易理解
更新流程可以自定義,可以加入更多部署相關步驟
不需要特別的 Git 知識
缺點:
沒有官方的 Git 機制來追蹤子專案的版本
主專案不記錄子專案的具體版本
需要手動管理更新腳本
建議選擇
對於學習階段和中小型專案,建議使用一般克隆 + 腳本方法,原因是:
設置簡單,學習曲線平緩
對 Docker 學習的干擾較小
腳本可以根據需要逐步擴展功能
適合快速迭代的開發環境
對於較大的專案或需要嚴格版本控制的環境,子模組方法可能更合適。
執行計畫
根據討論,將採用一般克隆的方法,未來的更新則使用腳本。具體步驟:
編寫前端的 Dockerfile(後端和資料庫的 Dockerfile 已由主管提供)
建立一個新的整合專案資料夾
將前後端專案都克隆到這個整合資料夾內
在整合資料夾內建立 docker-compose.yml 檔案來管理所有容器(前端、後端、資料庫)
設定正確的網路連線和環境變數,確保各容器間可以互相通訊
測試整合後的系統功能
建立更新腳本以便日後維護
Last updated