🛠 使用 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:
🔐 Step 2:設定 GitHub Secrets
為了安全儲存帳號密碼,不建議將帳號密碼寫死在 YAML 裡,請使用 GitHub Secrets:
-
到你的 Repo 頁面
-
點選 Settings → Secrets and variables → Actions → New repository secret
-
建立兩個變數:
Name | Value(你的內容) |
---|---|
DOCKER_USERNAME | your_dockerhub_username |
DOCKER_PASSWORD | your_dockerhub_password |
📦 Step 3:你的 Dockerfile 長怎樣?
假設你是用 ASP.NET Core 應用,Dockerfile 可能像這樣:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]
這份 Dockerfile
應放在專案根目錄,和 .github/
平行。
🧪 Step 4:觸發 Workflow 並驗證結果
只要你 Push 到 main 分支,GitHub Actions 就會自動:
-
Checkout 原始碼
-
登入 Docker Hub
-
建構 Docker 映像
-
推送至 Docker Hub
你可以在「Actions」頁籤中即時觀察執行狀況:
👉 https://github.com/你的帳號/你的專案/actions
🧰 進階:支援 Tag + 多版本推送
想讓你 Push Git Tag 時就產生對應版本映像?只要修改如下:
on:
push:
tags:
- '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)實現全自動部署
留言
張貼留言