Déployer une application web Flask ou FastAPI sur Azure Container Apps
Ce tutoriel vous montre comment conteneuriser une application web Python Flask ou FastAPI et la déployer sur Azure Container Apps. Azure Container Apps utilise la technologie de conteneur Docker pour héberger des images intégrées et des images personnalisées. Pour plus d’informations sur l’utilisation de conteneurs dans Azure, consultez Comparaison des options de conteneur Azure.
Dans ce tutoriel, vous utilisez l’interface CLI Docker et Azure CLI pour créer une image Docker et la déployer sur Azure Container Apps. Vous pouvez également déployer avec Visual Studio Code et l’extension Azure Tools.
Prérequis
Pour terminer ce tutoriel, vous avez besoin de ce qui suit :
Un compte Azure dans lequel vous pouvez déployer une application web sur Azure Container Apps. (An L’espace de travail Azure Container Registry et Log Analytics est créé pour vous dans le processus.)
Azure CLI, Docker et Docker CLI installés dans votre environnement local.
Obtenir l’exemple de code
Dans votre environnement local, obtenez le code.
Ajouter des fichiers Dockerfile et .dockerignore
Ajoutez un fichier Dockerfile pour indiquer à Docker comment générer l’image. Le fichier Dockerfile spécifie l’utilisation de Gunicorn, un serveur web de niveau production qui transfère les requêtes web aux frameworks Flask et FastAPI. Les commandes ENTRYPOINT et CMD indiquent à Gunicorn de gérer les requêtes pour l’objet d’application.
# 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
est utilisé pour le port de conteneur (interne) dans cet exemple, mais vous pouvez utiliser n’importe quel port gratuit.
Vérifiez le fichier requirements.txt pour vous assurer qu’il contient gunicorn
.
Flask==2.2.2
gunicorn
Werkzeug==2.2.2
Ajoutez un fichier .dockerignore pour exclure les fichiers inutiles de l’image.
.git*
**/*.pyc
.venv/
Configurer gunicorn
Gunicorn peut être configuré avec un fichier gunicorn.conf.py . Lorsque le fichier gunicorn.conf.py se trouve dans le même répertoire que celui où gunicorn
il est exécuté, vous n’avez pas besoin de spécifier son emplacement dans l’instruction ou CMD
le ENTRYPOINT
fichier Dockerfile. Pour plus d’informations sur la spécification du fichier de configuration, consultez les paramètres Gunicorn.
Dans ce tutoriel, le fichier de configuration suggéré configure GUnicorn pour augmenter son nombre de workers en fonction du nombre de cœurs de processeur disponibles. Pour plus d’informations sur les paramètres de fichier gunicorn.conf.py , consultez la configuration 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
Générer et exécuter l’image localement
Générez l’image localement.
Exécutez l’image localement dans un conteneur Docker.
docker run --detach --publish 5000:50505 flask-demo
Ouvrez l’URL http://localhost:5000
dans votre navigateur pour voir l’application web s’exécutant localement.
L’option --detach
exécute le conteneur en arrière-plan. L’option --publish
mappe le port du conteneur à un port sur l’hôte. Le port hôte (externe) est d’abord dans la paire, et le port de conteneur (interne) est deuxième. Pour plus d’informations, consultez Informations de référence sur l’exécution de Docker.
Déployer une application web sur Azure
Pour déployer l’image Docker sur Azure Container Apps, utilisez la commande az containerapp up . (Les commandes suivantes sont affichées pour l’interpréteur de commandes Bash. Modifiez le caractère de continuation (\
) le cas échéant pour d’autres interpréteurs de commandes.)
az containerapp up \
--resource-group web-flask-aca-rg --name web-aca-app \
--ingress external --target-port 50505 --source .
Une fois le déploiement terminé, vous disposez d’un groupe de ressources avec les ressources suivantes à l’intérieur de celui-ci :
- Un Azure Container Registry
- un environnement Container Apps
- Application conteneur exécutant l’image de l’application web
- Un espace de travail Log Analytics
L’URL de l’application déployée se trouve dans la sortie de la az containerapp up
commande. Ouvrez l’URL dans votre navigateur pour voir l’application web s’exécutant dans Azure. La forme de l’URL se présente comme suit https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io
, où le <generated-text>
<location-info>
déploiement est unique.
Mettre à jour et redéployer
Après avoir mis à jour le code, vous pouvez réexécuter la commande précédente az containerapp up
, qui régénère l’image et la redéploie dans Azure Container Apps. L’exécution de la commande prend à nouveau en compte que le groupe de ressources et l’application existent déjà, et met à jour uniquement l’application conteneur.
Dans des scénarios de mise à jour plus complexes, vous pouvez redéployer avec les commandes az acr build et az containerapp update pour mettre à jour l’application conteneur.
Nettoyage
Toutes les ressources Azure créées dans ce tutoriel se trouvent dans le même groupe de ressources. La suppression du groupe de ressources supprime toutes les ressources du groupe de ressources et est le moyen le plus rapide de supprimer toutes les ressources Azure utilisées pour votre application.
Pour supprimer des ressources, utilisez la commande az group delete .
Vous pouvez également supprimer le groupe dans le Portail Azure ou dans Visual Studio Code et l’extension Azure Tools.
Étapes suivantes
Pour plus d’informations, consultez les ressources suivantes :