Ejercicio: Implementación de un contenedor de Docker en Azure
En el proyecto se incluía una canalización de versión que compila los proyectos de la solución e implementa la aplicación web en la instancia de App Service. Ahora, es el momento de actualizar la construcción del pipeline e implementar el proyecto como un contenedor como alternativa.
En esta unidad aprenderá a:
- Defina algunas variables de canalización para facilitar el mantenimiento de la canalización de compilación.
- Reemplace las tareas de compilación existentes por una tarea unificada para compilar e insertar un contenedor de Docker.
- Reemplace la tarea Deploy existente por una que actualice la aplicación web de App Service por la nueva imagen de contenedor.
- Guarde la canalización para desencadenar una compilación y una versión.
Definición de variables que se van a compartir dentro de la canalización
Aquí, agregará una nueva variable de canalización a la canalización YAML existente definida en azure-pipelines.yml.
En Azure DevOps, vaya a Canalizaciones.
Seleccione la canalización.
Seleccione Editar. Asegúrese de que la rama está establecida en main ; para ello, selecciónela en el menú desplegable. Esto abre el archivo azure-pipelines.yml .
Agregue la línea resaltada siguiente para agregar una variable de canalización denominada
webRepository
ytag
. Se usarán en varias tareas para identificar de forma única la versión específica del contenedor al que se hace referencia. También puede quitar labuildConfiguration
variable; ya no la necesitará.trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
Reemplazar las tareas de la etapa de construcción
Andy: Ya no creo que necesitemos ninguna de estas tareas de compilación, ya que el Dockerfile de la carpeta del proyecto ya define la compilación que queremos. Sin embargo, aún no he tenido la oportunidad de ver lo que podemos usar para compilar la imagen mediante un Dockerfile. ¿Alguna idea?
Mara: Estaba viendo justamente esto. Parece que deberíamos poder compilar el contenedor e, incluso, insertarlo en el repositorio con una sola tarea. Vamos a agregarlo ahora.
Tarea de Docker
Puede usar la tarea docker para compilar e implementar imágenes de Docker. Reemplace toda la fase de compilación por el fragmento de código YAML siguiente.
- command: especifica el comando docker que se va a ejecutar.
- buildContext: especifica la ruta de acceso al contexto de compilación.
- repository: especifica el nombre del repositorio.
- dockerfile: especifica la ruta de acceso al Dockerfile.
- containerRegistry: especifica el nombre de la conexión del servicio del registro de Docker.
- tags: especifica una lista de etiquetas en líneas independientes. Estas etiquetas se usan en los comandos build, push y 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)
Reemplazo de la tarea de la fase de implementación
Andy: Bueno, eso parece bastante sencillo. Ahora todo lo que necesitamos es encontrar una tarea que indicará a App Service que use la versión recién insertada de la imagen de contenedor.
Mara: Ya estoy en eso. Es un poco diferente de implementar una compilación en Azure Pipelines, pero sigue siendo lo suficientemente simple como para que podamos completar la tarea en un solo paso. Vamos a agregarlo ahora.
Tarea Aplicación web de Azure para contenedores
La tarea Azure Web App for Container está diseñada para implementar contenedores de Docker en Azure App Service. Reemplace toda la fase deploy por el fragmento de código YAML siguiente.
- appName: especifica el nombre de una instancia de Azure App Service existente.
- azureSubscription: especifica el nombre de la suscripción de Azure Resource Manager para la implementación.
- imageName: especifica el nombre completo de la imagen de contenedor; por ejemplo,
myregistry.azurecr.io/nginx:latest
opython: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)
Guardado de la canalización para desencadenar una compilación y una versión
Seleccione Guardar en la esquina superior derecha de la página. Escriba el mensaje de confirmación y seleccione Guardar para confirmarlo.
Seleccione Ejecutar y asegúrese de que la rama esté configurada como main. Seleccione Ejecutar cuando haya terminado.
Seleccione la canalización para ver los registros. Una vez que la compilación se haya realizado correctamente, seleccione la tarea AzureWebAppContainer y, a continuación, seleccione la dirección URL de la aplicación de App Service para ver la aplicación web implementada.
Deberías ver tu aplicación web ejecutándose en App Service.
Andy: ¡Ha salido muy bien! Creo que la adopción de contenedores podría ser una gran victoria para nuestro equipo.