Exercício – Implantar um contêiner do Docker no Azure
Seu projeto veio com um pipeline de lançamento que compila os projetos na solução e implanta o aplicativo Web em seu Serviço de Aplicativo. Agora é hora de atualizar esse build de pipeline e implantar o projeto como um contêiner.
Nesta unidade, você vai:
- Definirá algumas variáveis de pipeline para facilitar a manutenção do pipeline de build.
- Substitua as tarefas de Build existentes por uma tarefa unificada para criar e enviar por push um contêiner do Docker.
- Substitua a tarefa Implantar existente por uma que atualize o Aplicativo Web do Serviço de Aplicativo pela nova imagem de contêiner.
- Salve o pipeline para disparar um build e uma versão.
Definir variáveis a serem compartilhadas no pipeline
Aqui, você adicionará uma nova variável de pipeline ao seu pipeline YAML existente definido em azure-pipelines.yml.
No Azure DevOps, navegue até Pipelines.
Selecione o pipeline.
Selecione Editar. Verifique se o branch está definido como main selecionando-o no menu suspenso. Isso exibe seu arquivo azure-pipelines.yml.
Adicione a linha realçada abaixo para adicionar variáveis de pipeline nomeadas
webRepositoryetag. Elas serão usadas em várias tarefas para identificar exclusivamente a versão específica do contêiner que está sendo referenciado. Você também pode remover abuildConfigurationvariável; você não precisará mais dela.trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
Substituir as tarefas da etapa de build
Andy: Acho que não precisamos mais dessas tarefas de build, pois o Dockerfile na pasta do projeto já define o build desejado. No entanto, ainda não tive a chance de ver o que podemos usar para criar a imagem usando um Dockerfile. Alguma ideia?
Mara: Eu só estava pesquisando isso. Parece que devemos conseguir compilar o contêiner e até mesmo enviá-lo por push para o repositório com uma só tarefa. Vamos adicioná-la agora.
Tarefa do Docker
Você pode usar a tarefa do Docker para criar e implantar imagens do Docker. Substitua todo o estágio Build pelo snippet YAML abaixo.
- comando: especifica o comando docker a ser executado.
- buildContext: especifica o caminho para o contexto de build.
- repositório: especifica o nome do repositório.
- dockerfile: especifica o caminho para o Dockerfile.
- containerRegistry: especifica o nome da conexão de serviço do Registro do Docker.
- etiquetas: especifica uma lista de etiquetas em linhas separadas. Essas tags são usadas nos comandos build, push e 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)
Substituir a tarefa da fase de implantação
Andy: Bem, isso parece bem simples. Agora só precisamos encontrar uma tarefa que instrua o App Service a usar a nova versão da imagem de contêiner.
Clara: Já estou nisso. É um pouco diferente de implantar um build no Azure Pipelines, mas ainda é direto o suficiente para fazermos o trabalho em uma só tarefa. Vamos adicioná-la agora.
Aplicativo Web do Azure para tarefa de contêiner
A tarefa Aplicativo Web do Azure para Contêiner foi projetada para implantar contêineres do Docker no Serviço de Aplicativo do Azure. Substitua todo o estágio Deploy pelo snippet YAML abaixo.
- appName: especifica o nome de um Serviço de Aplicativo do Azure existente.
- azureSubscription: especifica o nome da assinatura do Azure Resource Manager para a implantação.
-
imageName: especifica o nome da imagem de contêiner totalmente qualificado; por exemplo,
myregistry.azurecr.io/nginx:latestoupython: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)
Salvar o pipeline para disparar um build e uma versão
Selecione Validar e Salvar no canto superior direito da página. Digite sua mensagem de confirmação e selecione Salvar para confirmar.
Selecione Executar e verifique se o branch está definido para main. Selecione Executar quando terminar.
Selecione a linha de produção para exibir os logs. Depois que o build for concluído, selecione a tarefa AzureWebAppContainer e selecione a URL do Aplicativo do Serviço de Aplicativo para exibir seu aplicativo Web implantado.
Você deverá ver seu aplicativo Web em execução no Serviço de Aplicativo.
Paulo: Isso ficou ótimo! Acho que adotar contêineres pode ser uma grande vitória para nossa equipe.