Implementación de una aplicación web de Flask o FastAPI en Azure Container Apps
En este tutorial se muestra cómo incluir en contenedores una aplicación web de Python Flask o FastAPI e implementarla en Azure Container Apps. Azure Container Apps usa la tecnología de contenedor de Docker para hospedar imágenes integradas e imágenes personalizadas. 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 la CLI de Azure para crear una imagen de Docker e implementarla en Azure Container Apps. También puede implementar con Visual Studio Code y la extensión de Herramientas de Azure.
Requisitos previos
Para completar este tutorial, necesita:
Una cuenta de Azure donde puede implementar una aplicación web en Azure Container Apps. (An El área de trabajo de Azure Container Registry y Log Analytics se crean automáticamente en el proceso).
CLI de Azure, Docker y la CLI de Docker instaladas en el entorno local.
Obtener el código de ejemplo
En el entorno local, obtenga el código.
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 gunicorn
se ejecuta, no es necesario especificar su ubicación en ni en la ENTRYPOINT
CMD
instrucción del 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.
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.
Implementación de una aplicación web en Azure
Para implementar la imagen de Docker en Azure Container Apps, use el comando az containerapp up . (Se muestran los siguientes comandos para el shell de Bash. Cambie el carácter de continuación (\
) según corresponda para otros shells.
az containerapp up \
--resource-group web-flask-aca-rg --name web-aca-app \
--ingress external --target-port 50505 --source .
Cuando se complete la implementación, tendrá un grupo de recursos con los siguientes recursos dentro de ella:
- Instancia de Azure Container Registry
- Un entorno de Container Apps
- Una aplicación contenedora que ejecuta la imagen de la aplicación web
- Un área de trabajo de Log Analytics
La dirección URL de la aplicación implementada se encuentra en la salida del az containerapp up
comando. Abra la dirección URL en el explorador para ver la aplicación web que se ejecuta en Azure. El formato de la dirección URL será similar al siguiente https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io
, donde y <generated-text>
<location-info>
son únicos para la implementación.
Realización de actualizaciones y reimplementación
Después de realizar actualizaciones de código, puede volver a ejecutar el comando anterior az containerapp up
, que vuelve a generar la imagen y la vuelve a implementar en Azure Container Apps. La ejecución del comando vuelve a tener en cuenta que el grupo de recursos y la aplicación ya existen y actualiza solo la aplicación contenedora.
En escenarios de actualización más complejos, puede volver a implementar con los comandos az acr build y az containerapp update juntos para actualizar la aplicación contenedora.
Limpieza
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 .
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: