Docker 建置與推送

Vibe Prompt

「幫我在 GitHub Actions 中加入 Docker build 與 push 到 ghcr.io 的步驟。」

- name: Login to GitHub Container Registry
  uses: docker/login-action@v3
  with:
    registry: ghcr.io
    username: ${{ github.actor }}
    password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push
  uses: docker/build-push-action@v5
  with:
    context: .
    push: true
    tags: |
      ghcr.io/${{ github.repository }}:latest
      ghcr.io/${{ github.repository }}:${{ github.sha }}

完整 CD Pipeline

name: CD Pipeline

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup kubectl
        uses: azure/setup-kubectl@v4
        with:
          version: 'v1.28.3'
      
      - name: Configure K8s
        uses: azure/k8s-set-context@v4
        with:
          kubeconfig: ${{ secrets.KUBECONFIG }}
      
      - name: Deploy
        run: |
          kubectl set image deployment/my-app \
            my-app=ghcr.io/${{ github.repository }}:${{ github.sha }}
          kubectl rollout status deployment/my-app --timeout=5m

關鍵要點

  • ✅ CI (持續整合) = 頻繁合併程式碼 + 自動建置 + 自動測試
  • ✅ CD (持續部署) = 通過測試的自動部署到生產環境
  • ✅ CI/CD Pipeline 的核心:Build → Test → Deploy
  • ✅ GitHub Actions + Docker = 最受歡迎的 CI/CD 組合
  • ✅ 好 CI/CD 的標準:快、可靠、可重現

關鍵指標

| 指標 | 目標 | 意義 | |------|:----:|------| | Pipeline 時間 | < 10 分鐘 | 開發者等待時間越短越好 | | 部署頻率 | 每天多次 | 越小批次的部署風險越低 | | 失敗恢復時間 | < 1 小時 | 出錯後能快速回退 | | 變更失敗率 | < 15% | 部署到生產後的故障率 |



Docker Build & Push

為什麼用 Docker?

Docker 確保應用程式在所有環境中行為一致——開發機、測試機、正式機都用同一個 Image。

GitHub Actions Docker Build

name: Build and Push Docker Image

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: 登入 Docker Hub
        uses: docker/login-action@v3
        with:
          username: \${{ secrets.DOCKER_USERNAME }}
          password: \${{ secrets.DOCKER_PASSWORD }}
      
      - name: 建置 Image
        run: docker build -t myapp:\${{ github.sha }} .
      
      - name: 推送 Image
        run: |
          docker tag myapp:\${{ github.sha }} myrepo/myapp:latest
          docker push myrepo/myapp:latest

Docker Image 版本管理

| 標籤策略 | 範例 | 優點 | |:--------|:----|:----| | Git SHA | myapp:a1b2c3d | 唯一對應,可追溯到程式碼 | | Semantic | myapp:v1.2.3 | 人類可讀的版本號 | | Latest | myapp:latest | 最新版本,但不可靠 |

下一章預告:部署與回滾

Docker Image 建好後,下一章教你部署到正式環境和緊急回滾。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!