練習 - 將 Docker 容器部署到 Azure
專案隨附的發行管線可在解決方案中建立專案,並將 Web 應用程式部署至其 App Service。 現在,是時候更新該管線建置並將專案部署為容器了。
在本單元中,您將會:
- 定義一些管線變數,以更輕鬆維護組建管線。
- 將現有的組建工作換成整合工作,以建立並推送 Docker 容器。
- 將現有的部署工作換成別的工作,改以新的容器映像來更新 App Service Web 應用程式。
- 儲存管線以觸發組建和發行。
定義要在管線內共用的變數
在這裡,您會將新的管線變數新增至 azure-pipelines.yml 中定義的現有 YAML 管線。
從 Azure DevOps 瀏覽至 Pipelines。
選取管線。
選取編輯。 從下拉功能表中選取分支,確定分支已設定為 main 。 這會顯示您的 azure-pipelines.yml 檔案。
新增下列醒目提示的行,以新增名為
webRepository
和tag
的管線變數。 這些在多個工作中用來唯一識別所參考容器的特定版本。 您也可以移除buildConfiguration
變數;您不再需要它。trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
取代組建階段工作
Andy: 我認為我們不再需要這些建置工作,因為項目資料夾中的 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)
更換部署階段工作
Andy: 嗯,這似乎相當直接。 現在我們只需要找到一項工作,以指示 App Service 使用新推送的容器映像版本。
Mara:已經做好。 這與將組建部署到 Azure Pipelines 有些不同,但還算夠直接,以至於我們可以在一項工作中完成作業。 馬上新增。
適用於容器的 Azure Web 應用程式工作
適用於容器的 Azure Web 應用程式工作被設計用來將 Docker 容器部署至 Azure App Service。 將整個部署階段替換為下面的 YAML 片段。
- appName:指定現有 Azure App 服務 的名稱。
- 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)
儲存管線以觸發組建和發行
從頁面右上角選取 [ 儲存 ]。 輸入您的認可訊息,然後選取 [ 儲存 ] 以確認。
選取 [執行],並確定分支設定為「主分支」。 完成後,選取 [執行]。
選取管線以檢視記錄。 組建成功之後,選取 [AzureWebAppContainer] 工作,然後選取 [App Service 應用程式 URL] 以檢視已部署的 Web 應用程式。
您應該會看到 Web 應用程式在 App Service 上執行。
Andy:太棒了! 我認為採用容器對我們的團隊來說會很有幫助。