要將 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
如何驗證部署成功?
- 在 Azure Portal 找到你的 App Service,點擊 URL。
- 如果網頁沒出來,請進入左側選單的 Log Stream (記錄串流)。
- 看到
Node Server 正在執行中代表容器成功啟動了。
下一步建議:
既然已經上傳成功,你可能需要設定 Azure SQL 的連線權限。需要我幫你寫一段 SQL 語法,讓 App Service 的身分可以讀取資料庫嗎?