練習 - 將 Docker 容器部署至 Azure
您的專案隨附發行管線,可建置方案中的專案,並將 Web 應用程式部署至其 App Service。 現在,是時候更新該管線建置並將專案部署為容器了。
在此單元中,您將會:
- 定義一些管線變數,讓建置管線更容易維護。
- 以統一的工作取代現有的 建置 工作,以統一建置和推送 Docker 容器。
- 將現有的部署工作換成別的工作,改以新的容器映像來更新 App Service Web 應用程式。
- 儲存管線以觸發組建和發行。
定義在管線內共用的變數
在這裡,您會將新的管線變數新增至 azure-pipelines.yml中定義的現有 YAML 管線。
從 Azure DevOps 瀏覽至 [管線]。
選取管線。
請選取 ,再編輯。 從下拉功能表中選取分支,確定分支已設定為 main 。 這會顯示您的 azure-pipelines.yml 檔案。
在下方新增醒目提示的行,以新增名為
webRepository和tag的管線變數。 這些會用於多項工作,以唯一識別容器所參考的特定版本。 您也可以移除buildConfiguration變數;您不再需要它。trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
取代建置階段工作
安 迪: 我認為我們不再需要這些建置工作,因為項目資料夾中的 Dockerfile 已經定義我們想要的組建。 不過,我尚未有機會查看我們可以使用 Dockerfile 來建立映像檔的內容。 有什麼想法?
Mara:我還在找。 好像只要一個工作就可以建立容器,甚至推送至存放庫。 馬上新增。
Docker 工作
您可以使用 Docker 工作 來建置及部署 Docker 映射。 將整個 建置 階段替換為下面的 YAML 程式碼片段。
- command:指定要執行的 Docker 命令。
- buildContext:指定建置內容的路徑。
- 存放庫:指定存放庫的名稱。
- dockerfile:指定 Dockerfile 的路徑。
- containerRegistry:指定 Docker 登錄服務連線的名稱。
- tags:指定個別行上的標記清單。 這些標記用於組建、推送和buildAndPush命令。
- stage: 'Build'
displayName: 'Build and push'
jobs:
- job: 'Build'
displayName: 'Build job'
pool:
vmImage: 'ubuntu-20.04'
steps:
- task: Docker@2
displayName: 'Build and push the image to container registry'
inputs:
command: buildAndPush
buildContext: $(Build.Repository.LocalPath)
repository: $(webRepository)
dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
containerRegistry: 'Container Registry Connection'
tags: |
$(tag)
取代部署階段的任務
安迪: 嗯,這似乎相當簡單。 現在,我們需要尋找可指示App Service使用新推送版本的容器映像的工作。
Mara:已經做好。 這與將組建部署到 Azure Pipelines 有些不同,但還算夠直接,以至於我們可以在一項工作中完成作業。 馬上新增。
適用於容器的 Azure Web 應用程式工作
適用於容器的 Azure Web 應用程式工作的設計目的是將 Docker 容器部署至 Azure App Service。 將整個 部署 階段取代為下列 YAML 代碼段。
- appName:指定現有 Azure App Service 的名稱。
- azureSubscription:指定部署的 Azure Resource Manager 訂用帳戶名稱。
-
imageName:指定完整合格的容器映像名稱,例如,
myregistry.azurecr.io/nginx:latest或python:3.7.2-alpine/。
- stage: 'Deploy'
displayName: 'Deploy the container'
dependsOn: Build
jobs:
- job: 'Deploy'
displayName: 'Deploy job'
pool:
vmImage: 'ubuntu-20.04'
variables:
- group: Release
steps:
- task: AzureWebAppContainer@1
inputs:
appName: $(WebAppName)
azureSubscription: 'Resource Manager - Tailspin - Space Game'
imageName: $(RegistryName)/$(webRepository):$(build.buildId)
儲存管線,以觸發組建和版本
從頁面右上角選取 驗證並儲存。 輸入您的認可訊息,然後選取 [ 儲存 ] 以確認。
選取 [ 執行],並確定您的分支已設定為 main。 完成時,請選取 [ 執行 ]。
選取您的管線以檢視記錄。 建置成功之後,請選取 AzureWebAppContainer 工作,然後選取 App Service 應用程式 URL 以檢視已部署的 Web 應用程式。
您應該可以看到在 App Service 上執行的 Web 應用程式。
安 迪: 結果很棒! 我認為採用容器對於我們的團隊來說可能是一場巨大的勝利。