Share via


Implementar una aplicación web de Flask o FastPI contenedorizada en Azure App Service

En este tutorial se muestra cómo implementar una aplicación web de Python Flask o FastAPI en App de Azure Service mediante la característica Aplicación web para contenedores. Web App for Containers proporciona una fácil rampa para que los desarrolladores aprovechen las ventajas de la plataforma de servicio de App de Azure totalmente administrada, pero que también quieren un único artefacto implementable que contenga una aplicación y todas sus dependencias. Para más información sobre el uso de contenedores en Azure, consulte Comparación de las opciones de contenedor de Azure.

En este tutorial, usará la CLI de Docker y Docker para crear una imagen de Docker y probarla localmente. Además, usará la CLI de Azure para crear una imagen de Docker en Azure e implementarla en App de Azure Service. También puede implementar con Visual Studio Code con la extensión de Herramientas de Azure instalada. Para obtener un ejemplo de creación y creación de una imagen de Docker para ejecutarse en Azure Container Apps, consulte Implementación de una aplicación web de Flask o FastPI en Azure Container Apps.

Nota:

En este tutorial se muestra cómo crear una imagen de Docker que luego se puede ejecutar en App Service. Esto no es necesario para usar App Service. Puede implementar código directamente desde un área de trabajo local en App Service sin crear una imagen de Docker. Para obtener un ejemplo, consulte Inicio rápido: Implementación de una aplicación web de Python (Django o Flask) en App de Azure Service.

Requisitos previos

Para completar este tutorial, necesita:

  • Una cuenta de Azure donde puede implementar una aplicación web en App de Azure Service y Azure Container Registry.

  • CLI de Azure para crear una imagen de Docker e implementarla en App Service. Y, opcionalmente, Dockery la CLI de Docker para crear un Docker y probarlo en el entorno local.

Obtener el código de ejemplo

En el entorno local, obtenga el código.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git

Adición de archivos Dockerfile y .dockerignore

Agregue un Dockerfile para indicar a Docker cómo compilar la imagen. Dockerfile especifica el uso de Gunicorn, un servidor web de nivel de producción que reenvía las solicitudes web a los marcos flask y FastAPI. Los comandos ENTRYPOINT y CMD indican a Gunicorn que controle las solicitudes del objeto de aplicación.

# syntax=docker/dockerfile:1

FROM python:3.11

WORKDIR /code

COPY requirements.txt .

RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 50505

ENTRYPOINT ["gunicorn", "app:app"]

50505 se usa para el puerto de contenedor (interno) en este ejemplo, pero puede usar cualquier puerto libre.

Compruebe el archivo requirements.txt para asegurarse de que contiene gunicorn.

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Agregue un archivo .dockerignore para excluir archivos innecesarios de la imagen.

.git*
**/*.pyc
.venv/

Configuración de gunicorn

Gunicorn se puede configurar con un archivo gunicorn.conf.py . Cuando el archivo gunicorn.conf.py se encuentra en el mismo directorio donde se ejecuta gunicorn, no es necesario especificar su ubicación en el Dockerfile. Para obtener más información sobre cómo especificar el archivo de configuración, consulte Configuración de Gunicorn.

En este tutorial, el archivo de configuración sugerido configura gunicorn para aumentar su número de trabajos en función del número de núcleos de CPU disponibles. Para obtener más información sobre gunicorn.conf.py configuración de archivos, consulte Configuración de Gunicorn.

# Gunicorn configuration file
import multiprocessing

max_requests = 1000
max_requests_jitter = 50

log_file = "-"

bind = "0.0.0.0:50505"

workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers

timeout = 120

Compilación y ejecución de la imagen localmente

Compile la imagen localmente.

docker build --tag flask-demo .

Nota:

Si el docker build comando devuelve un error, asegúrese de que se está ejecutando docker deamon. En Windows, asegúrese de que Docker Desktop se está ejecutando.

Ejecute la imagen localmente en un contenedor de Docker.

docker run --detach --publish 5000:50505 flask-demo

Abra la dirección URL en el http://localhost:5000 explorador para ver la aplicación web que se ejecuta localmente.

La --detach opción ejecuta el contenedor en segundo plano. La --publish opción asigna el puerto de contenedor a un puerto en el host. El puerto host (externo) es primero en el par y el puerto de contenedor (interno) es el segundo. Para más información, consulte Referencia de ejecución de Docker.

Creación de un grupo de recursos y Azure Container Registry

  1. Cree un grupo con el comando az group create .

    az group create --name web-app-simple-rg --location eastus
    

    Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure. Al crear un grupo de recursos, especifique una ubicación, como eastus.

  2. Cree una instancia de Azure Container Registry con el comando az acr create .

    az acr create --resource-group web-app-simple-rg \
    --name webappacr123 --sku Basic --admin-enabled true
    

    Nota:

    El nombre del Registro debe ser único en Azure. Si recibe un error, pruebe un nombre diferente. Los nombres del Registro pueden constar de 5 a 50 caracteres alfanuméricos. No se permiten guiones y caracteres de subrayado. Para más información, consulte Reglas de nombre de Azure Container Registry. Si usa un nombre diferente, asegúrese de usar su nombre en lugar webappacr123 de en los comandos que hacen referencia a los artefactos del Registro y del Registro en las secciones siguientes.

    Azure Container Registry es un registro privado de Docker que almacena imágenes para su uso en Azure Container Instances, App de Azure Service, Azure Kubernetes Service y otros servicios. Al crear un registro, especifique un nombre, una SKU y un grupo de recursos. El segundo comando guarda la contraseña en una variable con el comando az credential show . La contraseña se usa para autenticarse en el Registro en un paso posterior.

  3. Establezca una variable de entorno en el valor de la contraseña del Registro.

    ACR_PASSWORD=$(az acr credential show \
    --resource-group web-app-simple-rg \
    --name webappacr123 \
    --query "passwords[?name == 'password'].value" \
    --output tsv)
    

    El comando para crear la variable de entorno se muestra para el shell de Bash. Cambie la sintaxis y el carácter de continuación (\) según corresponda para otros shells.

    También puede obtener la contraseña (ACR_PASSWORD) en Azure Portal ; para ello, vaya al Registro, seleccione Claves de acceso y copie la contraseña.

Compilación de la imagen en Azure Container Registry

Compile la imagen de Docker en Azure con el comando az acr build . El comando usa el Dockerfile en el directorio actual e inserta la imagen en el registro.

az acr build \
  --resource-group web-app-simple-rg \
  --registry webappacr123 \
  --image webappsimple:latest .

La --registry opción especifica el nombre del Registro y la --image opción especifica el nombre de la imagen. El nombre de la imagen tiene el formato registry.azurecr.io/repository:tag.

Implementación de una aplicación web en Azure

  1. Cree un plan de App Service con el comando az appservice plan .

    az appservice plan create \
    --name webplan \
    --resource-group web-app-simple-rg \
    --sku B1 \
    --is-linux
    
  2. Cree la aplicación web con el comando az webapp create .

    az webapp create \
    --resource-group web-app-simple-rg \
    --plan webplan --name webappsimple123 \
    --docker-registry-server-password $ACR_PASSWORD \
    --docker-registry-server-user webappacr123 \
    --role acrpull \
    --deployment-container-image-name webappacr123.azurecr.io/webappsimple:latest 
    

    Notas:

    • El nombre de la aplicación web debe ser único en Azure. Si recibe un error, pruebe un nombre diferente. El nombre puede constar de caracteres alfanuméricos y guiones, pero no puede empezar ni terminar con un guión. Para obtener más información, consulte Reglas de nombre Microsoft.Web.

    • Si usa un nombre diferente al webappacr123 de Azure Container Registry, asegúrese de actualizar los --docker-registry-server-user parámetros y --deployment-container-image-name correctamente.

    • La aplicación web puede tardar unos minutos en crearse. Puede comprobar los registros de implementación con el comando az webapp log tail . Por ejemplo, az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. Si ve entradas con "preparación" en ellas, el contenedor se está implementando.

    • La dirección URL de la aplicación web es <web-app-name>.azurewebsites.net, por ejemplo, https://webappsimple123.azurewebsites.net.

Realización de actualizaciones y reimplementación

Después de realizar cambios en el código, puede volver a implementar en App Service con los comandos az acr build y az webapp update .

Limpiar

Todos los recursos de Azure creados en este tutorial se encuentran en el mismo grupo de recursos. Al quitar el grupo de recursos, se quitan todos los recursos del grupo de recursos y se trata de la manera más rápida de quitar todos los recursos de Azure usados para la aplicación.

Para quitar recursos, use el comando az group delete .

az group delete --name web-app-simple-rg

También puede quitar el grupo en Azure Portal o en Visual Studio Code y la extensión de Herramientas de Azure.

Pasos siguientes

Para obtener más información, consulte los siguientes recursos: