Tutorial: Ejecución de una imagen personalizada de Docker en App ServiceTutorial: Run a custom Docker image in App Service

Azure App Service usa la tecnología de contenedores de Docker para hospedar imágenes integradas e imágenes personalizadas.Azure App Service uses the Docker container technology to host both built-in images and custom images. Para ver una lista de imágenes integradas, ejecute el comando de la CLI de Azure 'az webapp list-runtimes --linux'.To see a list of built-in images, run the Azure CLI command, 'az webapp list-runtimes --linux'. Si esas imágenes no satisfacen sus necesidades, puede crear e implementar una imagen personalizada.If those images don't satisfy your needs, you can build and deploy a custom image.

En este tutorial, aprenderá a:In this tutorial, you learn how to:

  • Crear una imagen personalizada si no hay ninguna integrada que satisfaga sus necesidadesBuild a custom image if no built-in image satisfies your needs
  • Insertar la imagen personalizada en un registro de contenedor privado en AzurePush the custom image to a private container registry on Azure
  • Ejecutar la imagen personalizada en App ServiceRun the custom image in App Service
  • Configuración de las variables de entornoConfigure environment variables
  • Actualizar y volver a implementar la imagenUpdate and redeploy the image
  • Acceso a los registros de diagnósticoAccess diagnostic logs
  • Conexión al contenedor con SSHConnect to the container using SSH

Al completar este tutorial, se incurre en un pequeño gasto en su cuenta de Azure para el registro de contenedor y puede suponer costos adicionales para hospedar el contenedor durante más de un mes.Completing this tutorial incurs a small charge in your Azure account for the container registry and can incur additional costs for hosting the container for longer than a month.

Configuración del entorno inicialSet up your initial environment

  • Disponga de una cuenta de Azure con una suscripción activa.Have an Azure account with an active subscription. Cree una cuenta gratuita.Create an account for free.
  • Instale Docker, el cual se usará para compilar imágenes de Docker.Install Docker, which you use to build Docker images. La instalación de Docker puede requerir reiniciar el equipo.Installing Docker may require a computer restart.
  • Instale la CLI de Azure 2.0.80 o posterior, con la que se ejecutan comandos en cualquier shell para aprovisionar y configurar los recursos de Azure.Install the Azure CLI 2.0.80 or higher, with which you run commands in any shell to provision and configure Azure resources.

Después de instalar Docker y la CLI de Azure, abra una ventana de terminal y compruebe que Docker está instalado:After installing Docker and the Azure CLI, open a terminal window and verify that docker is installed:

docker --version

Compruebe también que la versión de la CLI de Azure sea 2.0.80 o posterior:Also verify that your Azure CLI version is 2.0.80 or higher:

az --version

Después, inicie sesión en Azure mediante la CLI:Then sign in to Azure through the CLI:

az login

El comando az login abre un explorador que recopila sus credenciales.The az login command opens a browser to gather your credentials. Cuando el comando se completa, muestra la salida JSON que contiene información sobre las suscripciones.When the command completes, it shows JSON output containing information about your subscriptions.

Una vez que haya iniciado sesión, puede ejecutar comandos de Azure con la CLI de Azure para trabajar con los recursos de su suscripción.Once signed in, you can run Azure commands with the Azure CLI to work with resources in your subscription.

Clonación o descarga de la aplicación de ejemploClone or download the sample app

Puede obtener el ejemplo de este tutorial a través de Git Clone o mediante descarga.You can obtain the sample for this tutorial via git clone or download.

Clonación con GitClone with git

Clone el repositorio de ejemplo:Clone the sample repository:

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:Be sure to include the --config core.autocrlf=input argument to guarantee proper line endings in files that are used inside the Linux container:

A continuación, vaya a esa carpeta:Then go into that folder:

cd docker-django-webapp-linux

Descargar desde GitHubDownload from GitHub

En lugar de usar Git Clone, puede visitar https://github.com/Azure-Samples/docker-django-webapp-linux, seleccionar Clone (Clonar) y, a continuación, seleccionar Download ZIP (Descargar ZIP).Instead of using git clone, you can visit https://github.com/Azure-Samples/docker-django-webapp-linux, select Clone, and then select Download ZIP.

Descomprima el archivo ZIP en una carpeta denominada docker-django-webapp-linux.Unpack the ZIP file into a folder named docker-django-webapp-linux.

A continuación, abra una ventana de terminal en esa carpeta docker-django-webapp-linux.Then open a terminal window in that docker-django-webapp-linux folder.

(Opcional) Examen del archivo de Docker(Optional) Examine the Docker file

El archivo del ejemplo denominado Dockerfile que describe la imagen de Docker y contiene las instrucciones de configuración:The file in the sample named Dockerfile that describes the docker image and contains configuration instructions:

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/

# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
    && apt-get install -y --no-install-recommends openssh-server \
    && echo "$SSH_PASSWD" | chpasswd 

COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/
    
RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222

#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]
  • El primer grupo de comandos instala los requisitos de la aplicación en el entorno.The first group of commands installs the app's requirements in the environment.
  • El segundo grupo de comandos crea un servidor SSH para la comunicación segura entre el contenedor y el host.The second group of commands create an SSH server for secure communication between the container and the host.
  • La última línea del archivo, ENTRYPOINT ["init.sh"], invoca a init.sh para iniciar el servicio SSH y el servidor de Python.The last line, ENTRYPOINT ["init.sh"], invokes init.sh to start the SSH service and Python server.

Compilación y prueba de la imagen de forma localBuild and test the image locally

  1. Ejecute el siguiente comando para compilar la imagen:Run the following command to build the image:

    docker build --tag appsvc-tutorial-custom-image .
    
  2. Ejecute el contenedor de Docker de forma local para comprobar que la compilación funciona:Test that the build works by running the Docker container locally:

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

    Este comando docker run especifica el puerto con el argumento -p seguido del nombre de la imagen.This docker run command specifies the port with the -p argument followed by the name of the image.

    Sugerencia

    Si ejecuta Windows y ve el error standard_init_linux.go:211: exec user process caused "no such file or directory" (el proceso de usuario ejecutado provocó el error "no existe dicho archivo o directorio"), el archivo init.sh contiene los finales de línea CR o LF en lugar de los finales LF esperados.If you are running on Windows and see the error, standard_init_linux.go:211: exec user process caused "no such file or directory", the init.sh file contains CR-LF line endings instead of the expected LF endings. Este error se produce si ha usado git para clonar el repositorio de ejemplo, pero omitió el parámetro --config core.autocrlf=input.This error happens if you used git to clone the sample repository but omitted the --config core.autocrlf=input parameter. En este caso, vuelva a clonar el repositorio con el argumento "--config".In this case, clone the repository again with the `--config`` argument. También puede ver el error si editó init.sh y lo guardó con finales CR o LF.You might also see the error if you edited init.sh and saved it with CRLF endings. En este caso, guarde el archivo de nuevo solo con los finales LF.In this case, save the file again with LF endings only.

  3. Vaya a http://localhost:8000 para comprobar que la aplicación web y el contenedor funcionan correctamente.Browse to http://localhost:8000 to verify the web app and container are functioning correctly.

    Prueba local de la aplicación web

Uso de Azure Cloud ShellUse Azure Cloud Shell

En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure.You can use either Bash or PowerShell with Cloud Shell to work with Azure services. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Para iniciar Azure Cloud Shell:To start Azure Cloud Shell:

OpciónOption Ejemplo o vínculoExample/Link
Seleccione Pruébelo en la esquina superior derecha de un bloque de código.Select Try It in the upper-right corner of a code block. Solo con seleccionar Pruébelo no se copia automáticamente el código en Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Ejemplo de Probarlo para Azure Cloud Shell
Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador.Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. Iniciar Cloud Shell en una nueva ventanaLaunch Cloud Shell in a new window
Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal.Select the Cloud Shell button on the menu bar at the upper right in the Azure portal. Botón Cloud Shell en Azure Portal

Para ejecutar el código de este artículo en Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Inicie Cloud Shell.Start Cloud Shell.

  2. Seleccione el botón Copiar de un bloque de código para copiar el código.Select the Copy button on a code block to copy the code.

  3. Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl+Mayús+V en Windows y Linux, o bien seleccione Cmd+Mayús+V en macOS.Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Seleccione Entrar para ejecutar el código.Select Enter to run the code.

Crear un grupo de recursosCreate a resource group

En esta sección y en las siguientes, se aprovisionan los recursos de Azure en los que se inserta la imagen y, a continuación, se implementa un contenedor en Azure App Service.In this section and those that follow, you provision resources in Azure to which you push the image and then deploy a container to Azure App Service. Para empezar, cree un grupo de recursos en el que recopilar todos estos recursos.You start by creating a resource group in which to collect all these resources.

Ejecute el comando az group create para crear un grupo de recursos:Run the az group create command to create a resource group:

az group create --name AppSvc-DockerTutorial-rg --location westus2

Puede cambiar el valor de --location para especificar una región cercana.You can change the --location value to specify a region near you.

Inserción de la imagen en Azure Container RegistryPush the image to Azure Container Registry

En esta sección, va a insertar la imagen en Azure Container Registry desde la que App Service puede implementarla.In this section, you push the image to Azure Container Registry from which App Service can deploy it.

  1. Ejecute el comando az acr create para crear una instancia de Azure Container Registry:Run the az acr create command to create an Azure Container Registry:

    az acr create --name <registry-name> --resource-group AppSvc-DockerTutorial-rg --sku Basic --admin-enabled true
    

    Reemplace <registry-name> por un nombre único para el registro.Replace <registry-name> with a suitable name for your registry. El nombre debe contener solo letras y números, y debe ser único en todo Azure.The name must contain only letters and numbers and must be unique across all of Azure.

  2. Ejecute el comando az acr show para recuperar las credenciales para el registro:Run the az acr show command to retrieve credentials for the registry:

    az acr credential show --resource-group AppSvc-DockerTutorial-rg --name <registry-name>
    

    La salida JSON de este comando proporciona dos contraseñas junto con el nombre de usuario del registro.The JSON output of this command provides two passwords along with the registry's user name.

  3. Use el comando docker login para iniciar sesión en el registro de contenedor:Use the docker login command to sign in to the container registry:

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

    Reemplace <registry-name> y <registry-username> por los valores de los pasos anteriores.Replace <registry-name> and <registry-username> with values from the previous steps. Cuando se le solicite, escriba una de las contraseñas del paso anterior.When prompted, type in one of the passwords from the previous step.

    Use el mismo nombre de registro en el resto de pasos de esta sección.You use the same registry name in all the remaining steps of this section.

  4. Una vez que el inicio de sesión se realice correctamente, etiquete la imagen local de Docker para el registro:Once the login succeeds, tag your local Docker image for the registry:

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

    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.Uploading the image the first time might take a few minutes because it includes the base image. Las cargas posteriores suelen ser más rápidas.Subsequent uploads are typically faster.

    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.While you're waiting, you can complete the steps in the next section to configure App Service to deploy from the registry.

  6. Use el comando az acr repository list para comprobar que la operación de instalación se realizó de forma correcta:Use the az acr repository list command to verify that the push was successful:

    az acr repository list -n <registry-name>
    

    La salida debe mostrar el nombre de la imagen.The output should show the name of your image.

Configuración de App Service para implementar la imagen desde el registroConfigure App Service to deploy the image from the registry

Para implementar un contenedor en Azure App Service, primero debe crear una aplicación web en App Service y luego conectarla al registro de contenedor.To deploy a container to Azure App Service, you first create a web app on App Service, then connect the web app to the container registry. Cuando se inicia la aplicación web, App Service extrae automáticamente la imagen del registro.When the web app starts, App Service automatically pulls the image from the registry.

  1. Cree un plan de App Service mediante el comando az appservice plan create:Create an App Service plan using the az appservice plan create command:

    az appservice plan create --name AppSvc-DockerTutorial-plan --resource-group AppSvc-DockerTutorial-rg --is-linux
    

    Un plan de App Service corresponde a la máquina virtual que hospeda la aplicación web.An App Service plan corresponds to the virtual machine that hosts the web app. De forma predeterminada, el comando anterior usa un plan de tarifa B1 económico que es gratuito durante el primer mes.By default, the previous command uses an inexpensive B1 pricing tier that is free for the first month. Puede controlar el plan con el parámetro --sku.You can control the tier with the --sku parameter.

  2. Cree la aplicación web con el comando az webpp create:Create the web app with the az webpp create command:

    az webapp create --resource-group AppSvc-DockerTutorial-rg --plan AppSvc-DockerTutorial-plan --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 cual debe ser único en todo Azure.Replace <app-name> with a name for the web app, which must be unique across all of Azure. Reemplace también <registry-name> por el nombre del registro de la sección anterior.Also replace <registry-name> with the name of your registry from the previous section.

  3. Use 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:Use az webapp config appsettings set to set the WEBSITES_PORT environment variable as expected by the app code:

    az webapp config appsettings set --resource-group AppSvc-DockerTutorial-rg --name <app-name> --settings WEBSITES_PORT=8000
    

    Reemplace <app-name> por el valor que usó en el paso anterior.Replace <app-name> with the name you used in the previous step.

    Para más información sobre esta variable de entorno, consulte el archivo Léame del repositorio de GitHub del ejemplo.For more information on this environment variable, see the readme in the sample's GitHub repository.

  4. Habilite la identidad administrada para la aplicación web mediante el comando az webapp identity assign:Enable managed identity for the web app by using the az webapp identity assign command:

    az webapp identity assign --resource-group AppSvc-DockerTutorial-rg --name <app-name> --query principalId --output tsv
    

    Reemplace <app-name> por el valor que usó en el paso anterior.Replace <app-name> with the name you used in the previous step. La salida del comando (filtrada por los argumentos --query y --output) es la entidad de servicio de la identidad asignada, la cual usará pronto.The output of the command (filtered by the --query and --output arguments) is the service principal of the assigned identity, which you use shortly.

    La identidad administrada le permite conceder permisos a la aplicación web para acceder a otros recursos de Azure sin necesidad de credenciales específicas.Managed identity allows you to grant permissions to the web app to access other Azure resources without needing any specific credentials.

  5. Recupere el identificador de la suscripción con el comando az account show que necesitará en el paso siguiente:Retrieve your subscription ID with the az account show command, which you need in the next step:

    az account show --query id --output tsv
    
  6. Conceda permiso a la aplicación web para acceder al registro de contenedor:Grant the web app permission to access the container registry:

    az role assignment create --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourceGroups/AppSvc-DockerTutorial-rg/providers/Microsoft.ContainerRegistry/registries/<registry-name> --role "AcrPull"
    

    Reemplace los siguientes valores:Replace the following values:

    • <principal-id> por el identificador de entidad de servicio del comando az webapp identity assign<principal-id> with the service principal ID from the az webapp identity assign command
    • <registry-name> por el nombre del registro de contenedor<registry-name> with the name of your container registry
    • <subscription-id> por el identificador de suscripción recuperado con el comando az account show<subscription-id> with the subscription ID retrieved from the az account show command

Para más información acerca de estos permisos, consulte ¿Qué es el control de acceso basado en rol de Azure (RBAC)?.For more information about these permissions, see What is Azure role-based access control and

Implementación de la imagen y prueba de la aplicaciónDeploy the image and test the app

Puede completar estos pasos una vez que la imagen se inserte en el registro de contenedor y la instancia de App Service esté totalmente aprovisionada.You can complete these steps once the image is pushed to the container registry and the App Service is fully provisioned.

  1. Use el comando az webapp config container set para especificar el registro de contenedor y la imagen que se vaya a implementar para la aplicación web:Use the az webapp config container set command to specify the container registry and the image to deploy for the web app:

    az webapp config container set --name <app-name> --resource-group AppSvc-DockerTutorial-rg --docker-custom-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest --docker-registry-server-url https://<registry-name>.azurecr.io
    

    Reemplace <app_name> por el nombre de la aplicación web y reemplace <registry-name> en dos lugares por el nombre del registro.Replace <app_name> with the name of your web app and replace <registry-name> in two places with the name of your registry.

    • Al usar un registro que no sea de Docker Hub (como se muestra en este ejemplo), --docker-registry-server-url debe tener el formato https://, seguido del nombre de dominio completo del registro.When using a registry other than Docker Hub (as this example shows), --docker-registry-server-url must be formatted as https:// followed by the fully qualified domain name of the registry.
    • El mensaje "No se proporcionó ninguna credencial para acceder a Azure Container Registry.The message, "No credential was provided to access Azure Container Registry. Intentando buscar..." indica que Azure usa la identidad administrada de la aplicación para autenticarse con el registro de contenedor en lugar de solicitar un nombre de usuario y una contraseña.Trying to look up..." tells you that Azure is using the app's managed identity to authenticate with the container registry rather than asking for a username and password.
    • Si se produce el error, "AttributeError: el objeto 'NoneType' no tiene el atributo 'reserved'", asegúrese de que el valor de <app-name> sea correcto.If you encounter the error, "AttributeError: 'NoneType' object has no attribute 'reserved'", make sure your <app-name> is correct.

    Sugerencia

    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 AppSvc-DockerTutorial-rg.You can retrieve the web app's container settings at any time with the command az webapp config container show --name <app-name> --resource-group AppSvc-DockerTutorial-rg. La imagen se especifica en la propiedad DOCKER_CUSTOM_IMAGE_NAME.The image is specified in the property 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.When the web app is deployed through Azure DevOps or Azure Resource Manager templates, the image can also appear in a property named LinuxFxVersion. Ambas propiedades tienen el mismo propósito.Both properties serve the same purpose. Si ambas están presentes en la configuración de la aplicación web, LinuxFxVersion tiene prioridad.If both are present in the web app's configuration, LinuxFxVersion takes precedence.

  2. Una vez que se complete el comando az webapp config container set, la aplicación web debe ejecutarse en el contenedor en App Service.Once the az webapp config container set command completes, the web app should be running in the container on App Service.

    Para probar la aplicación, vaya a http://<app-name>.azurewebsites.net y reemplace <app-name> por el nombre de la aplicación web.To test the app, browse to http://<app-name>.azurewebsites.net, replacing <app-name> with the name of your web app. En el primer acceso, la aplicación puede tardar algún tiempo en responder porque App Service debe extraer toda la imagen del registro.On first access, it may take some time for the app to respond because App Service must pull the entire image from the registry. Si el tiempo del explorador se agota, simplemente actualice la página.If the browser times out, just refresh the page. Una vez que se extraiga la imagen inicial, las pruebas posteriores se ejecutarán mucho más rápido.Once the initial image is pulled, subsequent tests will run much faster.

    Prueba correcta de la aplicación web en Azure

Modificación del código de la aplicación y nueva implementaciónModify the app code and redeploy

En esta sección, realizará un cambio en el código de la aplicación web, reconstruirá el contenedor y, a continuación, lo enviará al registro.In this section, you make a change to the web app code, rebuild the container, and then push the container to the registry. A continuación, App Service extrae automáticamente la imagen actualizada del registro para actualizar la aplicación web en ejecución.App Service then automatically pulls the updated image from the registry to update the running web app.

  1. En la carpeta local docker-django-webapp-linux, abra el archivo app/templates/app/index.html.In your local docker-django-webapp-linux folder, open the file app/templates/app/index.html.

  2. Cambie el primer elemento HTML para que coincida con el código siguiente.Change the first HTML element to match the following code.

    <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. Guarde los cambios.Save your changes.

  4. Cambie a la carpeta docker-django-webapp-linux y vuelva a generar la imagen:Change to the docker-django-webapp-linux folder and rebuild the image:

    docker build --tag appsvc-tutorial-custom-image .
    
  5. Actualice el número de versión de la etiqueta de la imagen a v1.0.1:Update the version number in the image's tag to v1.0.1:

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

    Reemplace <registry-name> por el nombre del registro.Replace <registry-name> with the name of your registry.

  6. Inserte la imagen en el registro:Push the image to the registry:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  7. Reinicie la aplicación web:Restart the web app:

    az webapp restart --name <app_name> --resource-group AppSvc-DockerTutorial-rg
    

    Reemplace <app_name> por el nombre de la aplicación web.Replace <app_name> with the name of your web app. Tras el reinicio, App Service extrae la imagen actualizada del registro de contenedor.Upon restart, App Service pulls the updated image from the container registry.

  8. Para comprobar que la actualización se ha implementado, busque http://<app-name>.azurewebsites.net.Verify that the update has been deployed by browsing to http://<app-name>.azurewebsites.net.

Acceso a los registros de diagnósticoAccess diagnostic logs

  1. Active el registro de contenedor:Turn on container logging:

    az webapp log config --name <app-name> --resource-group AppSvc-DockerTutorial-rg --docker-container-logging filesystem
    
  2. Habilite el streaming de registro:Enable the log stream:

    az webapp log tail --name <app-name> --resource-group AppSvc-DockerTutorial-rg
    

    Si no ve los registros de la consola de inmediato, vuelve a comprobarlo en 30 segundos.If you don't see console logs immediately, check again in 30 seconds.

    También puede inspeccionar los archivos de registro desde el explorador en https://<app-name>.scm.azurewebsites.net/api/logs/docker.You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

  3. Para detener el streaming de registro en cualquier momento, escriba Ctrl+C.To stop log streaming at any time, type Ctrl+C.

Conexión al contenedor con SSHConnect to the container using SSH

SSH habilita la comunicación segura entre un contenedor y un cliente.SSH enables secure communication between a container and a client. Para habilitar la conexión SSH en su contenedor, la imagen personalizada debe configurarse para ello.To enable SSH connection to your container, your custom image must be configured for it. Una vez que el contenedor se esté ejecutando, puede abrir una conexión SSH.Once the container is running, you can open an SSH connection.

Configuración del contenedor para SSHConfigure the container for SSH

La aplicación de ejemplo que se usa en este tutorial ya tiene la configuración necesaria en el archivo Dockerfile que instala el servidor SSH y que también establece las credenciales de inicio de sesión.The sample app used in this tutorial already has the necessary configuration in the Dockerfile, which installs the SSH server and also sets the login credentials. Esta sección solo es meramente informativa.This section is informational only. Para conectarse al contenedor, vaya a la sección siguiente.To connect to the container, skip to the next section

ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
  && apt-get install -y --no-install-recommends openssh-server \
  && echo "$SSH_PASSWD" | chpasswd 

Nota

Esta configuración no permite realizar conexiones externas al contenedor.This configuration doesn't allow external connections to the container. SSH solo está disponible en el sitio de Kudu/SCM.SSH is available only through the Kudu/SCM Site. El sitio de Kudu/SCM se autentica con la cuenta de Azure.The Kudu/SCM site is authenticated with your Azure account.

El archivo Dockerfile también copia el archivo sshd_config en la carpeta /etc/ssh/ y expone el puerto 2222 en el contenedor:The Dockerfile also copies the sshd_config file to the /etc/ssh/ folder and exposes port 2222 on the container:

COPY sshd_config /etc/ssh/

# ...

EXPOSE 8000 2222

Se trata de un puerto interno al que solo pueden acceder los contenedores que se encuentren en la red puente de una red privada virtual.Port 2222 is an internal port accessible only by containers within the bridge network of a private virtual network.

Por último, el script de entrada, init.sh, inicia el servidor SSH.Finally, the entry script, init.sh, starts the SSH server.

#!/bin/bash
service ssh start

Apertura de una conexión SSH a un contenedorOpen SSH connection to container

  1. Vaya a https://<app-name>.scm.azurewebsites.net/webssh/host e inicie sesión con su cuenta de Azure.Browse to https://<app-name>.scm.azurewebsites.net/webssh/host and sign in with your Azure account. Reemplace <app-name> por el nombre de la aplicación web.Replace <app-name> with the name of your web app.

  2. Una vez que haya iniciado sesión, se le redirigirá a una página de información de la aplicación web.Once signed in, you're redirected to an informational page for the web app. Seleccione SSH en la parte superior de la página para abrir el shell y usar los comandos.Select SSH at the top of the page to open the shell and use commands.

    Por ejemplo, puede examinar los procesos que se ejecutan dentro de él mediante el comando top.For example, you can examine the processes running within it using the top command.

Limpieza de recursosClean up resources

Los recursos que creó en este artículo pueden incurrir en costos continuos.The resources you created in this article may incur ongoing costs. Para limpiar los recursos, solo tiene que eliminar el grupo de recursos que los contenga:to clean up the resources, you need only delete the resource group that contains them:

az group delete --name AppSvc-DockerTutorial-rg

Pasos siguientesNext steps

¿Qué ha aprendido?What you learned:

  • Implementar una imagen personalizada en un registro de contenedor privadoDeploy a custom image to a private container registry
  • Ejecutar la imagen personalizada en App ServiceDeploy and the custom image in App Service
  • Actualizar y volver a implementar la imagenUpdate and redeploy the image
  • Acceso a los registros de diagnósticoAccess diagnostic logs
  • Conexión al contenedor con SSHConnect to the container using SSH

Vaya al siguiente tutorial para aprender a asignar un nombre DNS personalizado a la aplicación.In the next tutorial, you learn how to map a custom DNS name to your app.

O bien, eche un vistazo a otros recursos:Or, check out other resources: