Migración de software personalizado a Azure App Service mediante un contenedor personalizado

Azure App Service proporciona pilas de aplicaciones predefinidas, como ASP.NET o Node.js, en Windows. Estas pilas de aplicación se ejecutan en IIS. El entorno Windows preconfigurado bloquea el sistema operativo para lo siguiente:

  • Acceso administrativo.
  • Instalaciones de software.
  • cambios en la caché global de ensamblados.

Para más información, consulte Funcionalidad del sistema operativo en App Service.

Puede desplegar una imagen de Windows de configuración personalizada desde Visual Studio para realizar los cambios del sistema operativo que la aplicación necesita. Esto facilita la migración de una aplicación local que requiere una configuración de software y sistema operativo personalizada. En este tutorial se muestra cómo migrar a App Service a partir de una aplicación de ASP.NET que utiliza fuentes personalizadas instaladas en la biblioteca de fuentes de Windows. Implemente una imagen de Windows con configuración personalizada desde Visual Studio en Azure Container Registry y, después, ejecútela en App Service.

Captura de pantalla que muestra la aplicación web que se ejecuta en un contenedor de Windows.

Requisitos previos

Configura la aplicación localmente

Descarga del ejemplo

En este paso se configura el proyecto de .NET local.

El proyecto de ejemplo contiene una aplicación ASP.NET sencilla que usa una fuente personalizada instalada en la biblioteca de fuentes de Windows. No es necesario instalar fuentes. Pero se trata del ejemplo de una aplicación que está integrada con el sistema operativo subyacente. Para migrar este tipo de aplicación a App Service, debe o bien rediseñar el código para quitar la integración o migrarla como está a un contenedor de Windows personalizado.

Instala la fuente

En el Explorador de Windows, vaya a custom-font-win-container-master/CustomFontSample, haga clic con el botón derecho en FrederickatheGreat-Regular.ttf y seleccione Instalar.

Esta fuente está disponible públicamente en Google Fonts.

Ejecuta la aplicación

Abra el archivo custom-font-win-container-master/CustomFontSample.sln en Visual Studio.

Presione Ctrl+F5 para ejecutar la aplicación sin depuración. La aplicación se muestra en el explorador predeterminado.

Captura de pantalla que muestra la aplicación en el explorador predeterminado.

Dado que la aplicación usa una fuente instalada, la aplicación no se puede ejecutar en el espacio aislado de App Service. Sin embargo, puede implementarlo mediante un contenedor de Windows en su lugar, ya que puede instalar la fuente en el contenedor de Windows.

Configurar contenedor de Windows

En el Explorador de soluciones, haga clic con el botón derecho en el proyecto CustomFontSample y seleccione Agregar>Compatibilidad de orquestación de contenedores.

Captura de pantalla del proyecto CustomFontSample en el Explorador de soluciones. Los elementos de menú Add y Container Orchestrator Support están resaltados.

Seleccione Docker Compose>Aceptar.

El proyecto ahora está configurado para ejecutarse en un contenedor de Windows. Un elemento Dockerfile se agrega al proyecto CustomFontSample y se agrega un proyecto docker-compose a la solución.

En el Explorador de soluciones, abra Dockerfile.

Tiene que usar una imagen padre compatible. Reemplace la línea FROM por el código siguiente para cambiar la imagen primaria:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019

Agregue la siguiente línea al final del archivo y guarde el archivo:

RUN ${source:-obj/Docker/publish/InstallFont.ps1}

Puede encontrar InstallFont.ps1 en el proyecto CustomFontSample. Es un sencillo script que instala la fuente. Puede encontrar una versión más compleja del script en la Galería de PowerShell.

Nota

Para probar el contenedor de Windows localmente, asegúrese de que Docker esté iniciado en la máquina local.

Publicar en Azure Container Registry

Azure Container Registry puede almacenar las imágenes para las implementaciones de contenedor. Puede configurar App Service para usar imágenes hospedadas en Container Registry.

Abra la ventana de publicación

En el Explorador de soluciones, haga clic con el botón derecho en el proyecto CustomFontSample y seleccione Publicar.

Captura de pantalla del proyecto CustomFontSample en el Explorador de soluciones. El elemento de menú Publish está resaltado.

Crear y publicar el registro

  1. En la ventana Publicar , seleccione Azure y, a continuación, seleccione Siguiente.

  2. Seleccione Azure Container Registry y, a continuación, seleccione Siguiente.

  3. Seleccione la suscripción en la que desea publicar el registro y, a continuación, seleccione Crear nuevo.

Captura de pantalla que muestra la ventana de publicación. El botón Crear nuevo está resaltado.

Inicia sesión con una cuenta de Azure

En la ventana Azure Container Registry , seleccione Agregar una cuenta e inicie sesión en la suscripción de Azure. Si ya ha iniciado sesión, seleccione en la lista desplegable la cuenta que contiene la suscripción deseada.

Configuración del registro

Configure el nuevo registro de contenedores con los valores sugeridos en la siguiente tabla como guía. Cuando termine, seleccione Crear.

Configuración Valor sugerido
Prefijo DNS Mantenga el nombre de registro generado o cámbielo por otro nombre único.
Grupo de recursos Seleccione Nuevo, escriba myResourceGroup y, a continuación, seleccione Aceptar.
SKU Básico. Para más información, consulte Niveles de precios.
Ubicación del registro Europa occidental

Captura de pantalla de la ventana Azure Container Registry.

Selecciona Finalizar.

Se abre una ventana de terminal en la que se muestra el progreso de la implementación de la imagen. Espere a que el despliegue se complete.

Iniciar sesión en Azure

Inicie sesión en Azure Portal.

Crear una aplicación web

Seleccione Crear un recurso y, a continuación, seleccione Crear en Aplicación web.

Configurar aspectos básicos de la aplicación

En la pestaña Aspectos básicos , configure las opciones mediante la tabla siguiente como guía.

Configuración Valor sugerido
Suscripción Asegúrese de que se ha seleccionado la suscripción correcta.
Grupo de recursos Seleccione Crear nuevo, escriba myResourceGroup y, a continuación, seleccione Aceptar.
Nombre Escriba un nombre único. La dirección URL de la aplicación web es https://<app-name>.azurewebsites.net, donde <app-name> es el nombre de la aplicación.
Publicar Contenedor
Sistema operativo Windows
Región Oeste de Europa
Plan para Windows Seleccione Crear nuevo, escriba myAppServicePlan y, a continuación, seleccione Aceptar.

La pestaña Aspectos básicos debe tener un aspecto similar al siguiente:

Recorte de pantalla de la pestaña Aspectos básicos que se usa para configurar la aplicación web.

Configurar el contenedor de Windows

En la pestaña Contenedor , configure el contenedor de Windows personalizado como se muestra en la tabla siguiente y, a continuación, seleccione Revisar y crear.

Configuración Valor sugerido
Origen de la imagen Azure Container Registry
Registro Seleccione el registro que ha creado anteriormente.
Imagen customfontsample
Tag más reciente

Creación completa de la aplicación

Seleccione Crear y espere a que Azure cree los recursos necesarios.

Vaya a la aplicación web

Una vez completada la implementación, aparece un mensaje de notificación:

Captura de pantalla que muestra el mensaje de notificación.

  1. Haga clic en Ir al recurso.

  2. En la página de la aplicación, seleccione el vínculo situado bajo URL.

Se abre una nueva página del explorador en la página siguiente:

Captura de pantalla que muestra la nueva página del explorador para la aplicación web.

Espere unos minutos e inténtelo de nuevo hasta que llegue a la página principal con la fuente esperada:

Recorte de pantalla de la página principal con la fuente que ha configurado.

¡Felicidades! Ha migrado una aplicación de ASP.NET a App Service en un contenedor de Windows.

Ver los registros de inicio del contenedor

El contenedor de Windows puede tardar un tiempo en cargarse. Para ver el progreso, vaya a la siguiente dirección URL. (Sustituya <app-name> por el nombre de la aplicación).

https://<app-name>.scm.azurewebsites.net/api/logstream

Los registros transmitidos tienen este aspecto:

14/09/2018 23:16:19.889 INFO - Site: fonts-win-container - Creating container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest.
14/09/2018 23:16:19.928 INFO - Site: fonts-win-container - Create container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest succeeded. Container Id 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:23.405 INFO - Site: fonts-win-container - Start container succeeded. Container: 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Configuring container
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container start-up and configuration completed successfully

Azure App Service usa la tecnología de contenedor de Docker para hospedar imágenes integradas e imágenes personalizadas. Para ver una lista de imágenes integradas, ejecute el comando de la CLI de Azure, az webapp list-runtimes --os linux. Si esas imágenes no satisfacen sus necesidades, puede crear e implementar una imagen personalizada.

Nota

El contenedor debe tener como destino la arquitectura x86-64. ARM64 no se admite.

En este tutorial, aprenderá a:

  • Insertar una imagen personalizada de Docker en Azure Container Registry.
  • Implemente la imagen personalizada en App Service.
  • Configurar variables de entorno.
  • Extraer la imagen en App Service mediante una identidad administrada.
  • Acceda a los registros de diagnóstico.
  • Habilitar CI/CD en Azure Container Registry para App Service.
  • Conéctese al contenedor mediante SSH.

Al completar este tutorial, se incurre en un pequeño gasto en la cuenta de Azure para el registro de contenedor y puede suponer costos adicionales si hospeda el contenedor durante más de un mes.

Configura tu entorno inicial

En este tutorial se necesita la versión 2.0.80, o versiones posteriores, de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.

  • Instale Docker, el cual se usará para compilar imágenes de Docker. La instalación de Docker puede requerir reiniciar el equipo.

Después de instalar Docker, abra una ventana de terminal y compruebe que Docker está instalado:

docker --version

Clona o descarga la aplicación de ejemplo

Puede obtener el ejemplo de este tutorial a través de Git Clone o mediante descarga.

Clona el repositorio con Git Bash

Clone el repositorio de ejemplo:

git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input

Asegúrese de incluir el argumento --config core.autocrlf=input para garantizar los finales de línea correctos en los archivos que se usan en el contenedor de Linux.

Después, vaya a la carpeta:

cd docker-django-webapp-linux

Descarga el archivo ZIP desde GitHub

En lugar de usar el clon de Git, puede ir a https://github.com/Azure-Samples/docker-django-webapp-linux y seleccionar Código>local>Descargar ZIP.

Descomprima el archivo ZIP en una carpeta denominada docker-django-webapp-linux.

Después, abra una ventana de terminal en la carpeta docker-django-webapp-linux.

Prepara el recipiente de muestra

El terminal de navegador más reciente y az webapp exec proporcionan acceso autenticado a contenedores Linux en ejecución sin requerir un servidor SSH ni una contraseña SSH incrustada en la imagen. El WebSSH heredado de Kudu y el acceso az webapp ssh podrían requerir aún un servidor SSH. El repositorio de muestras contiene una configuración SSH heredada. Antes de compilar, sustituye el contenido de su archivo Dockerfile por la siguiente configuración solo para la app:

FROM tiangolo/uwsgi-nginx-flask:python3.6

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/

COPY init.sh /usr/local/bin/

RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000

ENTRYPOINT ["init.sh"]

Sustituye el contenido de init.sh por el siguiente script, manteniendo los finales de línea en Linux:

#!/bin/bash
set -e

exec python /code/manage.py runserver 0.0.0.0:8000

Elimina el archivo sshd_config heredado de tu carpeta local de ejemplos para que ADD . /code/ no lo copie en la imagen.

El Dockerfile instala las dependencias de la aplicación, copia la aplicación y el script de arranque, y expone el puerto de la aplicación. El punto de entrada solo inicia la aplicación en Python. Estos cambios eliminan la instalación SSH y las credenciales del ejemplo. La imagen incluye /bin/bash para el terminal más reciente del navegador y el shell az webapp exec predeterminado.

Compila y prueba la imagen localmente

Nota

Docker Hub impone cuotas en el número de extracciones anónimas por IP y el número de pulls autenticados por usuario gratuito. Si observa que las extracciones de Docker Hub están limitadas, intente ejecutar docker login si aún no ha iniciado sesión.

  1. Ejecute el siguiente comando para compilar la imagen:

    docker build --tag appsvc-tutorial-custom-image .
    
  2. Ejecute el contenedor de Docker de forma local para comprobar que la compilación funciona:

    docker run -it -p 8000:8000 appsvc-tutorial-custom-image
    

    Este docker run comando especifica el puerto mediante el -p argumento e incluye el nombre de la imagen. -it permite detenerlo mediante Ctrl+C.

    Consejo

    Si se ejecuta en Windows y ve el error *standard_init_linux.go:211: exec user process caused "no such file or directory"*, el archivo init.sh contiene finales de línea CRLF en lugar de los finales de LF esperados. Este error se produce si ha usado Git para clonar el repositorio de ejemplo, pero ha omitido el parámetro --config core.autocrlf=input. En este caso, vuelva a clonar el repositorio con el argumento --config. También puede ver el error si editó init.sh y lo guardó con terminaciones CRLF. En este caso, guarde el archivo de nuevo solo con finales de línea LF.

  3. Vaya a http://localhost:8000 para comprobar que la aplicación web y el contenedor funcionan correctamente.

    Captura de pantalla de resultados de la prueba.

Crear una identidad administrada asignada por el usuario

App Service puede usar una identidad administrada predeterminada o una identidad administrada asignada por el usuario para autenticarse con un registro de contenedor. En este tutorial, usará una identidad administrada asignada por el usuario.

  1. Ejecute el comando az group create para crear un grupo de recursos:

    az group create --name msdocs-custom-container-tutorial --location westeurope
    

    Puede cambiar el valor de --location para especificar una región cercana.

  2. Cree una identidad administrada en el grupo de recursos:

    az identity create --name myID --resource-group msdocs-custom-container-tutorial
    

Crear un registro de contenedores

  1. Cree un registro de contenedor mediante el comando az acr create siguiente. Reemplace <registry-name> por un nombre único para el registro. El nombre debe contener solo letras y números, y debe ser único en todo Azure.

    az acr create --name <registry-name> --resource-group msdocs-custom-container-tutorial --sku Basic --admin-enabled true
    

    El parámetro --admin-enabled permite insertar imágenes en el registro mediante un conjunto de credenciales administrativas.

  2. Para recuperar las credenciales administrativas, ejecute el comando az credential acr show:

    az acr credential show --resource-group msdocs-custom-container-tutorial --name <registry-name>
    

    La salida JSON de este comando proporciona dos contraseñas junto con el nombre de usuario del registro.

Sube la imagen de ejemplo a Container Registry

En esta sección, enviará la imagen a Container Registry, que App Service usará más adelante.

  1. Desde el terminal local donde creó la imagen de ejemplo, use el comando docker login para iniciar sesión en el registro de contenedor:

    docker login <registry-name>.azurecr.io --username <registry-username>
    

    Reemplace <registry-name> y <registry-username> por los valores de los pasos anteriores. Cuando se le solicite, escriba una de las contraseñas de la sección anterior.

    Use el mismo nombre de registro en el resto de pasos de esta sección.

  2. Cuando el inicio de sesión se haya realizado correctamente, etiquete su imagen Docker local para el registro:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  3. Use el comando docker push para enviar la imagen al registro:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    La primera vez que la imagen se carga puede tardar unos minutos, ya que incluye la imagen base. Las cargas posteriores suelen ser más rápidas.

    Mientras espera, puede completar los pasos de la sección siguiente para configurar App Service de modo que la implementación se haga desde el registro.

Autorización de la identidad administrada para el registro

La identidad administrada que creó aún no tiene autorización para extraer del registro de contenedor. En este paso, habilitará la autorización.

  1. Recupere el identificador de principal de la identidad administrada:

    principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)
    
  2. Recupere el identificador de recurso del registro de contenedor:

    registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)
    
  3. Conceda permiso a la identidad administrada para acceder al registro de contenedor:

    az role assignment create --assignee $principalId --scope $registryId --role "AcrPull"
    

    Para más información sobre estos permisos, vea ¿Qué es el control de acceso basado en rol de Azure?.

Crear la aplicación web

  1. Cree un plan de App Service mediante el az appservice plan create comando :

    az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linux
    

    Un plan de App Service corresponde a la máquina virtual que hospeda la aplicación web. De manera predeterminada, el comando anterior usa un plan de tarifa B1 económico que es gratuito durante el primer mes. Puede especificar el nivel mediante el parámetro --sku.

  2. Cree la aplicación web con el comando az webapp create:

    az webapp create --resource-group msdocs-custom-container-tutorial --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Reemplace <app-name> por un nombre para la aplicación web. El nombre debe ser único en todo Azure. Reemplace también <registry-name> por el nombre del registro de la sección anterior.

    Consejo

    Puede recuperar la configuración del contenedor de la aplicación web en cualquier momento con el comando az webapp config container show --name <app-name> --resource-group msdocs-custom-container-tutorial. La imagen se especifica en la propiedad DOCKER_CUSTOM_IMAGE_NAME. Cuando la aplicación web se implementa con Azure DevOps o con las plantillas de Azure Resource Manager, la imagen también puede aparecer en una propiedad denominada LinuxFxVersion. Ambas propiedades tienen el mismo propósito. Si ambas están presentes en la configuración de la aplicación web, LinuxFxVersion tiene prioridad.

Configurar la aplicación web

En este paso, configurará la aplicación web de la siguiente manera:

  • Configure la aplicación para enviar solicitudes al puerto 8000. El contenedor de ejemplo escucha las solicitudes web en el puerto 8000.
  • Configure la aplicación para que use la identidad administrada para extraer imágenes del registro de contenedor.
  • Configure la implementación continua desde el registro de contenedor. (Cada publicación de una imagen en el registro de contenedores hará que tu aplicación extraiga la nueva imagen). Este paso no es necesario para configurar tu aplicación web para extraer del registro de contenedores, pero puede notificar a la aplicación web cuando se publica una nueva imagen en el registro de contenedores. Si no completa este paso, debe iniciar manualmente la descarga de la imagen reiniciando la aplicación web.
  1. Usa az webapp config appsettings set para establecer la variable de entorno WEBSITES_PORT según lo esperado por el código de la aplicación:

    az webapp config appsettings set --resource-group msdocs-custom-container-tutorial --name <app-name> --settings WEBSITES_PORT=8000
    

    Reemplace <app-name> por el nombre que usó en el paso anterior.

  2. Habilite la identidad administrada asignada por el usuario en la aplicación web mediante el az webapp identity assign comando :

    id=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query id --output tsv)
    az webapp identity assign --resource-group msdocs-custom-container-tutorial --name <app-name> --identities $id
    

    Reemplace <app-name> por el valor que usó en el paso anterior.

  3. Configure la aplicación para extraer de Container Registry mediante identidades administradas.

    appConfig=$(az webapp config show --resource-group msdocs-custom-container-tutorial --name <app-name> --query id --output tsv)
    az resource update --ids $appConfig --set properties.acrUseManagedIdentityCreds=True
    

    Reemplace <app-name> por el nombre que usó en el paso anterior.

  4. Establezca el identificador de cliente que usa la aplicación web para extraer de Container Registry. Este paso no es necesario si usa la identidad administrada asignada por el sistema.

    clientId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query clientId --output tsv)
    az resource update --ids $appConfig --set properties.AcrUserManagedIdentityID=$clientId
    
  5. Habilite CI/CD en App Service.

    cicdUrl=$(az webapp deployment container config --enable-cd true --name <app-name> --resource-group msdocs-custom-container-tutorial --query CI_CD_URL --output tsv)
    

    CI_CD_URL es una dirección URL que App Service genera automáticamente. El registro debe usar esta dirección URL para notificar a App Service que se ha producido un push de imagen. En realidad, no crea el webhook automáticamente.

  6. Cree un webhook en el registro de contenedores. Use la dirección CI_CD_URL que obtuvo en el último paso.

    az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latest
    
  7. Para probar si el webhook está configurado correctamente, haga ping al webhook y compruebe si recibe una respuesta 200 OK.

    eventId=$(az acr webhook ping --name appserviceCD --registry <registry-name> --query id --output tsv)
    az acr webhook list-events --name appserviceCD --registry <registry-name> --query "[?id=='$eventId'].eventResponseMessage"
    

    Consejo

    Para ver toda la información sobre todos los eventos de webhook, quite el parámetro --query.

    Si está siguiendo en tiempo real el registro del contenedor, debería ver un mensaje Starting container for site después del ping del webhook porque el webhook desencadena el reinicio de la aplicación.

Vaya a la aplicación web

Para probar la aplicación, vaya a https://<app-name>.azurewebsites.net. Reemplace <app-name> por el nombre de la aplicación web.

La primera vez que intente acceder a la aplicación, es posible que tarde algún tiempo en responder porque App Service debe extraer toda la imagen del registro. Si el tiempo del explorador se agota, simplemente actualice la página. Después de extraer la imagen inicial, las pruebas posteriores se ejecutarán mucho más rápido.

Captura de pantalla de la aplicación web que se ejecuta en un explorador.

Acceder a los registros de diagnóstico

Mientras espera a que App Service extraiga la imagen, resulta útil para ver exactamente lo que hace App Service transmitiendo los registros del contenedor al terminal.

  1. Active el registro de contenedor:

    az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystem
    
  2. Habilite el flujo de registros:

    az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorial
    

    Si no ve los registros de la consola de inmediato, vuelva a comprobarlo en 30 segundos.

    También puede inspeccionar los archivos de registro desde un explorador si va a https://<app-name>.scm.azurewebsites.net/api/logs/docker.

  3. Para detener el streaming de registro en cualquier momento, presione Ctrl+C.

Modifica el código de la aplicación y vuelve a desplegarla

En esta sección, realizará un cambio en el código de la aplicación web, reconstruirá la imagen y, a continuación, la publicará en el registro de contenedores. A continuación, App Service extrae automáticamente la imagen actualizada del registro para actualizar la aplicación web en ejecución.

  1. En la carpeta local docker-django-webapp-linux, abra el archivo app/templates/app/index.html.

  2. Cambie el primer elemento HTML para que coincida con el código siguiente.

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a>
        </div>
      </div>
    </nav>
    
  3. Guarda los cambios.

  4. Vaya a la carpeta docker-django-webapp-linux y recompile la imagen:

    docker build --tag appsvc-tutorial-custom-image .
    
  5. Actualice la etiqueta de la imagen a latest:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Reemplace <registry-name> por el nombre del registro.

  6. Inserte la imagen en el registro:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  7. Una vez que se complete el push de la imagen, el webhook notifica a App Service sobre el push y App Service intenta descargar la imagen actualizada. Espere unos minutos y compruebe que la actualización se ha implementado accediendo a https://<app-name>.azurewebsites.net.

Conéctese al contenedor mediante SSH

Cuando el contenedor está en funcionamiento, puedes acceder a él a través del proxy Kudu autenticado de App Service usando el terminal del navegador más reciente o az webapp exec. No necesitas instalar ni iniciar un servidor SSH en la imagen para estas opciones.

Para los requisitos previos de acceso y los controles de aplicaciones o slots, consulta Abrir una shell de contenedor (SSH) y ejecutar comandos.

Abra la conexión SSH al contenedor

  1. Utiliza CLI de Azure 2.90.0 o posterior y inicia sesión en tu cuenta de Azure. Abre un shell interactivo en tu terminal local con el comando de vista previa az webapp exec :

    az webapp exec --resource-group msdocs-custom-container-tutorial --name <app-name>
    
  2. Examina los procesos que se ejecutan dentro de la app usando top, si está disponible en la imagen.

Para la ejecución desacoplada de comandos en lugar de una sesión interactiva, véase Ejecutar comandos sin una sesión interactiva. La aceptación de una solicitud no confirma que un comando se haya completado correctamente.

Limpiar recursos

Los recursos que creó en este artículo pueden incurrir en costos continuos. Para limpiar los recursos, solo tiene que eliminar el grupo de recursos que los contiene:

az group delete --name msdocs-custom-container-tutorial

Siguientes pasos

Lo que ha aprendido:

  • Despliegue una imagen personalizada en un registro de contenedores privado.
  • Implemente la imagen personalizada en App Service.
  • Actualice y vuelva a desplegar la imagen.
  • Acceda a los registros de diagnóstico.
  • Conéctese al contenedor mediante SSH.
  • Suba una imagen personalizada de Docker a Container Registry.
  • Implemente la imagen personalizada en App Service.
  • Configurar variables de entorno.
  • Extraer la imagen en App Service mediante una identidad administrada.
  • Acceda a los registros de diagnóstico.
  • Habilitar CI/CD en Azure Container Registry para App Service.
  • Conéctese al contenedor mediante SSH.

Vaya al siguiente tutorial:

O consulte otros recursos: