Docker Desktop 裡的 Image 部署到 Azure App Service

要將 Docker Desktop 裡的 Image 部署到 Azure App Service,最標準且穩定的做法是透過 Azure Container Registry (ACR) 作為中繼站。

你可以把 ACR 想像成私有的 Docker Hub,App Service 會從那裡抓取 Image 來執行。以下是手動操作的完整步驟:

1. 建立並登入 Azure Container Registry (ACR)

首先,你需要一個在雲端存放 Image 的倉庫。請開啟 PowerShell 並執行:

PowerShell

# 1. 登入 Azure
az login

# 2. 建立 ACR (名稱必須是唯一,例如 myregistry123)
$ACR_NAME = "你的ACR名稱"
$RESOURCE_GROUP = "你的資源群組名稱"
az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic

# 3. 登入 ACR (這會讓你的 Docker 指令有權限上傳)
az acr login --name $ACR_NAME

2. 標記並上傳 Image

Docker 需要知道要把 Image 傳到哪一個遠端位址。你需要幫現有的 policy-app-node 貼上一張帶有 ACR 網址的「標籤(Tag)」。

PowerShell

# 1. 取得 ACR 的登入伺服器位址 (通常是 名稱.azurecr.io)
$ACR_SERVER = "$ACR_NAME.azurecr.io"

# 2. 幫本地 Image 貼標籤
# 格式:docker tag [本地名稱] [ACR位址]/[映像檔名稱]:[版本]
docker tag policy-app-node "${ACR_SERVER}/policy-app:v1"

# 3. 推送到雲端
docker push "${ACR_SERVER}/policy-app:v1"

3. 建立並設定 Azure App Service

現在 Image 已經在雲端了,接著要在 Azure 上開一個網頁空間來執行它。

PowerShell

# 1. 建立 App Service 方案 (必須選 Linux)
$PLAN_NAME = "MyAppPlan"
az appservice plan create --name $PLAN_NAME --resource-group $RESOURCE_GROUP --is-linux --sku B1

# 2. 建立 Web App 並指定 ACR 中的 Image
$WEB_APP_NAME = "你的網頁應用程式名稱"
az webapp create --resource-group $RESOURCE_GROUP --plan $PLAN_NAME --name $WEB_APP_NAME --container-image-name "${ACR_SERVER}/policy-app:v1"

$WEB_APP_NAME 建議使用純英文名稱的 Web App(例如 nycu-policy-app)


4. 開啟權限 (關鍵步驟)

預設情況下,App Service 沒有權限去 ACR 抓檔案。最簡單的方法是開啟 App Service 的 受控識別 (Managed Identity) 並給予拉取權限:

PowerShell

# 1. 開啟 App Service 的識別
az webapp identity assign --name $WEB_APP_NAME --resource-group $RESOURCE_GROUP

# 2. 允許 App Service 從 ACR 拉取 (系統會自動處理認證)
az webapp config container set --name $WEB_APP_NAME --resource-group $RESOURCE_GROUP --docker-custom-image-name "${ACR_SERVER}/policy-app:v1" --docker-registry-server-url "https://${ACR_SERVER}"

5. 設定 Port 與環境變數

因為你的 Node.js 跑在 8080,必須告訴 Azure 轉發流量到這個埠號:

PowerShell

az webapp config appsettings set --resource-group $RESOURCE_GROUP --name $WEB_APP_NAME --settings WEBSITES_PORT=8080

如何驗證部署成功?

  1. 在 Azure Portal 找到你的 App Service,點擊 URL
  2. 如果網頁沒出來,請進入左側選單的 Log Stream (記錄串流)
  3. 看到 Node Server 正在執行中 代表容器成功啟動了。

下一步建議:

既然已經上傳成功,你可能需要設定 Azure SQL 的連線權限。需要我幫你寫一段 SQL 語法,讓 App Service 的身分可以讀取資料庫嗎?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *