Ejecución de un contenedor personalizado en Azure

Azure App Service proporciona las pilas de aplicaciones predefinidas en Windows, como ASP.NET o Node.js, que se ejecutan en IIS. Sin embargo, las pilas de aplicaciones preconfiguradas bloquean el sistema operativo e impiden el acceso de bajo nivel. Los contenedores de Windows personalizados no tienen estas restricciones y permiten a los desarrolladores personalizar completamente los contenedores y proporcionar a las aplicaciones contenedorizadas acceso total a la funcionalidad de Windows.

En este inicio rápido se muestra cómo implementar una aplicación ASP.NET, que está en una imagen de Windows, en Azure Container Registry desde Visual Studio. La aplicación se ejecuta en un contenedor personalizado en Azure App Service.

Requisitos previos

Para realizar este tutorial:

  • Instalar Docker para Windows.
  • Cambiar Docker para ejecutar contenedores de Windows.
  • Instale Visual Studio 2022 con las cargas de trabajo ASP.NET y desarrollo web y desarrollo de Azure. En Visual Studio 2022 Community, asegúrese de que el componente de plantillas de proyecto y elemento de .NET Framework está seleccionado con la carga de trabajo de ASP.NET y desarrollo web. Si ya ha instalado Visual Studio 2022:
    • Para instalar las actualizaciones más recientes de Visual Studio, seleccione Ayuda > Buscar actualizaciones.
    • Para agregar las cargas de trabajo en Visual Studio, seleccione Herramientas > Obtener herramientas y características.

Creación de una aplicación web de ASP.NET

Cree una aplicación web ASP.NET siguiendo estos pasos:

  1. Abra Visual Studio y seleccione Crear un proyecto.

  2. En Crear un proyecto, busque y elija Aplicación web ASP.NET Core (.NET Framework) para C# y, a continuación, seleccione Siguiente.

    Creación de un nuevo proyecto

  3. En Configurar el nuevo proyecto, en Nombre de proyecto, asigne el nombre de myfirstazurewebapp a la aplicación. En Marco, seleccione .NET Framework 4.8 y después Crear.

    Configuración del proyecto de aplicación web

  4. Puede implementar cualquier tipo de aplicación web de ASP.NET en Azure. Para este inicio rápido, elija la plantilla MVC.

  5. En Autenticación, seleccione Ninguna. En Avanzadas, seleccione Compatibilidad con Docker y desactive Configurar para HTTPS. Seleccione Crear.

    Creación de una aplicación web ASP.NET

  6. Si el archivo Dockerfile no se abre automáticamente, ábralo desde el Explorador de soluciones.

  7. Necesita una imagen principal compatible. Cambie la imagen primaria reemplazando la línea FROM con el código siguiente y guarde el archivo:

    FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
    
  8. En el menú de Visual Studio, seleccione Depurar > Iniciar sin depurar para ejecutar la aplicación web localmente.

    Ejecución de la aplicación de forma local

Publicación en Azure Container Registry

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

  2. En Destino, seleccione Container Registry para Docker y, espués, haga clic en Siguiente.

    Selección de Container Registry para Docker

  3. En Destino específico, seleccione Azure Container Registry y, después, haga clic en Siguiente.

    Publicar desde la página de información general del proyecto

  4. En Publicar, asegúrese de que se ha seleccionado la suscripción correcta. En Registros de contenedor, seleccione el botón + para crear una nueva instancia de Azure Container Registry.

    Creación de una instancia de Azure Container Registry

  5. En Crear nuevo, asegúrese de que se ha elegido la suscripción correcta. En Grupo de recursos, seleccione Nuevo y escriba myResourceGroup como nombre y haga clic en Aceptar. En SKU, seleccione Básico. En Ubicación del Registro, seleccione una ubicación del Registro y, a continuación, haga clic en Crear.

    Dealles de Azure Container Registry

  6. En Publicar, en Container Registry, seleccione el registro que creó y, después, Finalizar.

    Selección de una instancia existente de Azure Container Registry

    Espere a que la implementación se complete. La página Publicar muestra ahora el nombre del repositorio. Seleccione el botón de copia para copiar el repositorio para su uso posterior.

    Captura de pantalla en la que se resalta el nombre del repositorio.

Creación de una aplicación de contenedor de Windows

  1. Inicie sesión en Azure Portal.

  2. Elija Crear un recurso en la esquina superior izquierda de Azure Portal.

  3. En Servicios populares, seleccione Crear en Aplicación web.

  4. En Crear aplicación web, elija la suscripción y un grupo de recursos. Si es necesario, puede crear un grupo de recursos.

  5. Proporcione un nombre de aplicación, como win-container-demo. Elija Contenedor de Docker para Publicar y Windows para Sistema operativo. Seleccione Siguiente: Docker para continuar.

    Crear una instancia de Web App for Containers

  6. En Origen de imagen, elija Docker Hub y en Imagen y etiqueta, escriba el nombre del repositorio que copió en Publicar en Azure Container Registry.

    Configurar una instancia de Web App for Containers

    Si tiene una imagen personalizada de la aplicación web en otra parte como, por ejemplo, en Azure Container Registry o en cualquier otro repositorio privado, puede configurarla aquí.

  7. Seleccione Revisar y crear y, después, Crear y espere que Azure cree los recursos necesarios.

Desplazamiento a la aplicación de contenedor

Una vez completada la operación de Azure, se muestra un cuadro de notificación.

Implementación correcta

  1. Haga clic en Ir al recurso.

  2. En la información general de este recurso, siga el vínculo situado junto a URL.

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

Inicio de la aplicación de contenedor de Windows

Espere unos minutos e inténtelo de nuevo, hasta que llegue a la página principal predeterminada de ASP.NET:

Aplicación de contenedor de Windows en ejecución

¡Enhorabuena! Ya está ejecutando el primer contenedor de Windows personalizado en Azure App Service.

Consulta de 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 sustituyendo <app_name> por el nombre de la aplicación.

https://<app_name>.scm.azurewebsites.net/api/logstream

Los registros transmitidos tienen este aspecto:

2018-07-27T12:03:11  Welcome, you are now connected to log-streaming service.
27/07/2018 12:04:10.978 INFO - Site: win-container-demo - Start container succeeded. Container: facbf6cb214de86e58557a6d073396f640bbe2fdec88f8368695c8d1331fc94b
27/07/2018 12:04:16.767 INFO - Site: win-container-demo - Container start complete
27/07/2018 12:05:05.017 INFO - Site: win-container-demo - Container start complete
27/07/2018 12:05:05.020 INFO - Site: win-container-demo - Container started successfully

Actualización local y nueva implementación

  1. En Visual Studio, en el Explorador de soluciones, abra Vistas > Inicio > Index.cshtml.

  2. Busque la etiqueta HTML <div class="jumbotron"> en la parte superior y reemplace el elemento entero por el código siguiente:

    <div class="jumbotron">
        <h1>ASP.NET in Azure!</h1>
        <p class="lead">This is a simple app that we've built that demonstrates how to deploy a .NET app to Azure App Service.</p>
    </div>
    
  3. Para volver a realizar la implementación en Azure, haga clic con el botón derecho en el proyecto myfirstazurewebapp, en el Explorador de soluciones y elija Publicar.

  4. En la página de publicación, seleccione Publicar y espere hasta que la publicación se complete.

  5. Para indicar a App Service que extraiga la nueva imagen de Docker Hub, reinicie la aplicación. Volviendo a la página de aplicación en el portal, haga clic en Reiniciar > .

    Reinicio de la aplicación web en Azure

Vuelva a desplazarse a la aplicación de contenedor. Al actualizar la página web, la aplicación debe volver a la página "Iniciando" al principio y luego volver a mostrar la página web actualizada transcurridos unos minutos.

Aplicación web actualizada en Azure

Pasos siguientes

O bien, eche un vistazo a otros recursos:

App Service en Linux proporciona pilas de aplicaciones predefinidas en Linux con compatibilidad con lenguajes como .NET, PHP o Node.js entre otros. También puede usar una imagen personalizada de Docker para ejecutar la aplicación web en una pila de aplicaciones aún sin definir en Azure. En este inicio rápido se muestra cómo implementar una imagen desde Azure Container Registry (ACR) en App Service.

Requisitos previos

Creación de un registro de contenedor

En este inicio rápido, se usa Azure Container Registry como registro de su elección. Puede usar otros registros, pero los pasos pueden diferir ligeramente.

Cree un registro de contenedor según las instrucciones que se indican en Inicio rápido: Creación de un instancia de Azure Container Registry mediante Azure Portal.

Importante

Asegúrese de establecer la opción Usuario administrador en Habilitar al crear el registro de contenedor de Azure. También puede establecerla en la sección Claves de acceso de la página de registro en Azure Portal. Esta opción de configuración es necesaria para el acceso a App Service. Para obtener información sobre la identidad administrada, consulte Implementación desde el tutorial de ACR.

Iniciar sesión

  1. Inicie Visual Studio Code.

  2. Seleccione el logotipo de Azure en la barra de actividades, vaya al explorador APP SERVICE, después, seleccione Iniciar sesión en Azure y siga las instrucciones.

    inicio de sesión en Azure

  3. En la barra de estado de la parte inferior, compruebe la dirección de correo electrónico de la cuenta de Azure. Se debe mostrar la suscripción en el explorador APP SERVICE.

  4. En la barra de actividades, seleccione el logotipo de Docker. En el explorador REGISTROS, compruebe que aparece el registro de contenedor que ha creado.

    Captura de pantalla que muestra el valor de Registros con Azure expandido.

Comprobación de los requisitos previos

Compruebe que tiene Docker instalado y en ejecución. El siguiente comando mostrará la versión de Docker si se está ejecutando.

docker --version

Creación y compilación de una imagen

  1. En Visual Studio Code, abra una carpeta vacía y agregue un archivo llamado Dockerfile. En el archivo Dockerfile, pegue el contenido en función del marco de lenguaje deseado:
FROM mcr.microsoft.com/appsvc/dotnetcore:lts

ENV PORT 8080
EXPOSE 8080

ENV ASPNETCORE_URLS "http://*:${PORT}"

ENTRYPOINT ["dotnet", "/defaulthome/hostingstart/hostingstart.dll"]

En este archivo Dockerfile, la imagen primaria es uno de los contenedores de .NET integrados de App Service. Puede encontrar los archivos de código fuente en el repositorio de GitHub Azure-App-Service/ImageBuilder, en GenerateDockerFiles/dotnetcore. Su archivo Dockerfile copia una aplicación sencilla de .NET en /defaulthome/hostingstart. El archivo Dockerfile simplemente inicia esa aplicación.

  1. Abra la paleta de comandos y escriba Docker Images: Build Image (Imágenes de Docker: compilar imagen). Pulse Entrar para ejecutar el comando.

  2. En el cuadro de etiqueta de imagen, especifique la etiqueta que desee en el formato siguiente: <acr-name>.azurecr.io/<image-name>/<tag>, donde <acr-name> es el nombre del registro de contenedor que ha creado. Presione ENTRAR.

  3. Cuando la imagen termine de compilarse, haga clic en Actualizar en la parte superior del explorador IMÁGENES y compruebe que la imagen se ha compilado correctamente.

    Captura de pantalla que muestra la imagen compilada con la etiqueta.

Implementación en el registro de contenedor

  1. En la barra de actividades, haga clic en el icono de Docker. En el explorador IMÁGENES, busque la imagen que acaba de compilar.

  2. Expanda la imagen, haga clic con el botón derecho en la etiqueta que desee y haga clic en Insertar.

  3. Asegúrese de que la etiqueta de imagen comienza por <acr-name>.azurecr.io y pulse Entrar.

  4. Cuando Visual Studio Code finalice la inserción de la imagen en el registro de contenedor, haga clic en Actualizar en la parte superior del explorador REGISTROS y compruebe que la imagen se ha insertado correctamente.

    Captura de pantalla que muestra la imagen implementada en Azure Container Registry.

Implementación en App Service

  1. En el explorador REGISTROS, expanda la imagen, haga clic con el botón derecho en la etiqueta y haga clic en Deploy image to Azure App Service (Implementar imagen en Azure App Service).
  2. Siga las indicaciones para elegir una suscripción, un nombre de aplicación globalmente único, un grupo de recursos y un plan de App Service. Elija B1 Básico como plan de tarifa y una región cercana.

Después de la implementación, la aplicación está disponible en http://<app-name>.azurewebsites.net.

Un grupo de recursos es una colección con nombre de todos los recursos de la aplicación en Azure. Por ejemplo, un grupo de recursos puede contener una referencia a un sitio web, una base de datos y una función de Azure.

Un plan de App Service define los recursos físicos que se van a usar para hospedar el sitio web. Este inicio rápido usa un plan de hospedaje básico en la infraestructura de Linux, lo que significa que el sitio se hospedará en una máquina Linux junto con otros sitios web. Si empieza con el plan básico, puede usar Azure Portal para escalar verticalmente de modo que el suyo sea el único sitio que se ejecute en una máquina. Para conocer los precios, consulte Precios de App Service.

Examinar el sitio web

El panel Salida muestra el estado de las operaciones de implementación. Cuando finalice la operación, haga clic en Abrir sitio en la notificación emergente para abrir el sitio en el explorador.

Pasos siguientes

Ha completado correctamente este inicio rápido.

La aplicación de App Service extrae del registro de contenedor cada vez que se inicia. Si recompila la imagen, solo tiene que insertarla en el registro de contenedor y la aplicación extrae la imagen actualizada cuando se reinicia. Para indicar a la aplicación que extraiga la imagen actualizada inmediatamente, reiníciela.

Otras extensiones de Azure: