🛠 使用 GitHub Actions 自動建構 Docker 映像教學【CI/CD 實作範例】

 

📖 文章摘要(Meta Description)

學會如何使用 GitHub Actions 在每次 Push 或 Tag 時自動建構 Docker 映像,並推送到 Docker Hub 或 GitHub Container Registry(GHCR)。適用於 DevOps、自動化部署、CI/CD 整合等實務開發情境。


✨ 為什麼要用 GitHub Actions 自動建構 Docker 映像?

傳統上,我們可能需要在本機下指令:

docker build -t yourapp .

docker push yourapp

但當團隊多人協作或持續部署需求變高時,手動操作就顯得吃力且容易出錯。這時,GitHub Actions 就能讓整個流程變得:

✅ 自動化
✅ 可版本控
✅ 可追蹤歷史紀錄
✅ 可觸發部署(如搭配 K8s, Azure, GCP 等)


🔧 準備工作

在開始之前,你需要:

  • ✅ GitHub Repository(儲存你的原始碼與 Dockerfile)

  • ✅ Docker Hub 帳號(或使用 GHCR)

  • .NET 專案(或任何語言都可以)

  • Dockerfile 已可在本機建構成功


📝 Step 1:在 GitHub Repository 新增 GitHub Actions Workflow

在專案根目錄下新增:

.github/workflows/docker-build.yml

以下是建構並推送到 Docker Hub 的範例 Workflow:

name: Build and Push Docker Image

on:
  push:
    branches: [ "main" ]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout Code
      uses: actions/checkout@v4

    - name: Log in to Docker Hub
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: Build and Push Docker Image
      uses: docker/build-push-action@v5
      with:
        context: .
        push: true
        tags: yourdockerhubusername/yourapp:latest


🔐 Step 2:設定 GitHub Secrets

為了安全儲存帳號密碼,不建議將帳號密碼寫死在 YAML 裡,請使用 GitHub Secrets:

  1. 到你的 Repo 頁面

  2. 點選 Settings → Secrets and variables → Actions → New repository secret

  3. 建立兩個變數:

NameValue(你的內容)
DOCKER_USERNAMEyour_dockerhub_username
DOCKER_PASSWORDyour_dockerhub_password

📦 Step 3:你的 Dockerfile 長怎樣?

假設你是用 ASP.NET Core 應用,Dockerfile 可能像這樣:

  1. FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
  2. WORKDIR /app
  3. FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
  4. WORKDIR /src
  5. COPY . .
  6. RUN dotnet restore
  7. RUN dotnet publish -c Release -o /app
  8. FROM base AS final
  9. WORKDIR /app
  10. COPY --from=build /app .
  11. ENTRYPOINT ["dotnet", "MyApp.dll"]

這份 Dockerfile 應放在專案根目錄,和 .github/ 平行。


🧪 Step 4:觸發 Workflow 並驗證結果

只要你 Push 到 main 分支,GitHub Actions 就會自動:

  1. Checkout 原始碼

  2. 登入 Docker Hub

  3. 建構 Docker 映像

  4. 推送至 Docker Hub

你可以在「Actions」頁籤中即時觀察執行狀況:

👉 https://github.com/你的帳號/你的專案/actions


🧰 進階:支援 Tag + 多版本推送

想讓你 Push Git Tag 時就產生對應版本映像?只要修改如下:

  1. on:
  2. push:
  3. tags:
  4. - 'v*.*.*'

並搭配變數輸出:

tags: yourdockerhubusername/yourapp:${{ github.ref_name }}

這樣推一個 v1.0.0 的 Tag,就會產出 yourapp:v1.0.0 的映像!


🎯 範例結果

當成功推送後,你可以在 Docker Hub 上看到你的映像:

🔗 https://hub.docker.com/repository/docker/yourdockerhubusername/yourapp

或直接 Pull 來使用:

docker pull yourdockerhubusername/yourapp:latest



🧠 結語

使用 GitHub Actions + Docker 的自動建構流程,可以讓團隊:

✅ 更快驗證功能
✅ 無需手動建構與上傳
✅ 搭配 CD 工具(如 ArgoCD, Azure DevOps)實現全自動部署


留言

這個網誌中的熱門文章

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題

🛠【實戰排除教學】從 VS Code 的 _logger 錯誤,到 PowerShell 找不到 npm/serve,再到 Oracle ORA-03135 連線中斷——一次搞懂!

🔎如何在 Oracle PL/SQL 儲存過程中為文字欄位加入換行符號(CHR(10))——以 Updlcmremark 為例