Docker 整合

專案現況

現在專案已經完成,需要使用 Docker 容器化。

後端伺服器和資料庫已經由主管協助建立好 Docker 映像檔,我要做的是:

  1. 將前端也用 Docker 容器化

  2. 把前後端、資料庫用同一個 docker-compose 設定檔合併起來部署

  3. 驗證整合後的功能是否正常

目前前端和後端各有一個獨立的程式碼儲存庫 (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 機制來追蹤子專案的版本

  • 主專案不記錄子專案的具體版本

  • 需要手動管理更新腳本

建議選擇

對於學習階段和中小型專案,建議使用一般克隆 + 腳本方法,原因是:

  1. 設置簡單,學習曲線平緩

  2. 對 Docker 學習的干擾較小

  3. 腳本可以根據需要逐步擴展功能

  4. 適合快速迭代的開發環境

對於較大的專案或需要嚴格版本控制的環境,子模組方法可能更合適。

執行計畫

根據討論,將採用一般克隆的方法,未來的更新則使用腳本。具體步驟:

  1. 編寫前端的 Dockerfile(後端和資料庫的 Dockerfile 已由主管提供)

  2. 建立一個新的整合專案資料夾

  3. 將前後端專案都克隆到這個整合資料夾內

  4. 在整合資料夾內建立 docker-compose.yml 檔案來管理所有容器(前端、後端、資料庫)

  5. 設定正確的網路連線和環境變數,確保各容器間可以互相通訊

  6. 測試整合後的系統功能

  7. 建立更新腳本以便日後維護

Last updated