Docker est un outil open source conçu pour faciliter la création, le déploiement et l'exécution d'applications à l'aide de conteneurs. Un conteneur est un package logiciel qui regroupe le code et toutes ses dépendances afin que l'application s'exécute rapidement et de manière fiable d'un environnement informatique à un autre.
Flask est un framework Web Python populaire. Il est classé comme un microframework car il ne nécessite pas d'outils ou de bibliothèques particuliers. Comparé à d'autres frameworks, il est léger et hautement structuré.
Dans ce tutoriel, nous expliquerons comment déployer l'application Flask avec Docker sur le serveur Debian 10.
Prérequis
- Un serveur exécutant Debian 10.
- Un mot de passe root est configuré sur votre serveur.
Mise en route
Avant de commencer, c'est une bonne idée de mettre à jour le package de votre système vers la dernière version. Vous pouvez mettre à jour tous les packages avec la commande suivante :
apt-get update -y
apt-get upgrade -y
Une fois tous les packages mis à jour, redémarrez votre système pour appliquer les modifications.
Installer les dépendances requises
Ensuite, vous devrez installer le serveur Web Nginx et d'autres dépendances dans votre système. Vous pouvez tous les installer à l'aide de la commande suivante :
apt-get install nginx apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -y
Une fois tous les packages installés, vous pouvez passer à l'étape suivante.
Installer Docker
Par défaut, la dernière version de Docker n'est pas disponible dans le référentiel Debian 10. C'est donc une bonne idée de l'installer à partir du dépôt officiel de Docker.
Tout d'abord, téléchargez et ajoutez la clé GPG avec la commande suivante :
wget https://download.docker.com/linux/debian/gpg apt-key add gpg
Ensuite, ajoutez le référentiel Docker avec la commande suivante :
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"
Ensuite, mettez à jour le référentiel et installez le Docker avec la commande suivante :
apt-get update -y
apt-get install docker-ce -y
Une fois l'installation terminée avec succès, vérifiez l'état du Docker avec la commande suivante :
menu fixe d'état systemctl
Vous devriez obtenir le résultat suivant :
? docker.service - Docker Application Container Engine Loaded :chargé (/lib/systemd/system/docker.service ; activé ; préréglage du fournisseur :activé) Actif :actif (en cours d'exécution) depuis le dim 2020-04-19 06:26:25 UTC ; Il y a 1min 8s Docs :https://docs.docker.com PID principal :8883 (dockerd) Tâches :10 Mémoire :46,6 Mo CGroup :/system.slice/docker.service ??8883 /usr/bin/dockerd -H fd :// --containerd=/run/containerd/containerd.sockApr 19 06:26:24 debian10 dockerd[8883] :time="2020-04-19T06:26:24.413828757Z" level=warning msg="Votre noyau not support swap memory limitApr 19 06:26:24 debian10 dockerd[8883] :time="2020-04-19T06:26:24.413876690Z" level=warning msg="Votre noyau ne prend pas en charge cgroup rt period"Apr 19 06 :26:24 debian10 dockerd[8883] :time="2020-04-19T06:26:24.413889604Z" level=warning msg="Votre noyau ne prend pas en charge l'exécution cgroup rt Apr 19 06:26:24 debian10 dockerd[8883] :time ="2020-04-19T06:26:24.414115814Z" level=info msg="Chargement des conteneurs :start."19 avril 06:26:24 debian10 dockerd[8883] :time="2020-04-19T06:26:24.788332166 Z" level=info msg="Le pont par défaut (docker0) est attribué avec une adresse IP apr 19 06:26:24 debian10 dockerd[8883] :time="2020-04-19T06:26:24.972022325Z" lev el=info msg="Chargement des conteneurs :terminé."Apr 19 06:26:25 debian10 dockerd[8883] :time="2020-04-19T06:26:25.010940205Z" level=info msg="Daemon Docker" commit=afacb8b7f0 graphdriver(s)=o19 avril 06:26:25 debian10 dockerd[8883] :time="2020-04-19T06:26:25.011145541Z" level=info msg="Le démon a terminé l'initialisation"19 avril 06:26 :25 debian10 systemd[1] :démarrage du moteur de conteneur d'applications Docker. 19 avril 06:26:25 debian10 dockerd[8883] :time="2020-04-19T06:26:25.074603639Z" level=info msg="API listen on / var/run/docker.sock"
À ce stade, Docker est installé et en cours d'exécution. Vous pouvez maintenant passer à l'étape suivante.
Configuration de la structure du répertoire Flask
Ensuite, vous devrez créer une structure de répertoires pour contenir votre application Flask.
Créons un répertoire nommé flask dans le répertoire /var/www/ :
mkdir -p /var/www/flask
Ensuite, changez le répertoire en flask et créez la structure de répertoires pour flask :
cd /var/www/flask
mkdir -p app/static
mkdir -p app/templates
Le répertoire statique est utilisé pour stocker les images, les fichiers CSS et JavaScript, tandis que le répertoire des modèles est utilisé pour stocker les modèles HTML de votre projet.
Ensuite, vous devrez créer un fichier __init__.py dans le répertoire de l'application :
application nano/__init__.py
Ajoutez le contenu suivant pour créer une instance Flask et importez la logique à partir du fichier views.py :
from flask import Flaskapp =Flask(__name__)from app import views
Enregistrez et fermez le fichier, puis créez le fichier views.py dans le répertoire de votre application.
nano app/views.py
Ajoutez les lignes suivantes
depuis l'importation de l'application [email protected]('/')def home() :renvoie "hello world !"
Enregistrez et fermez le fichier puis créez le fichier uwsgi.ini avec la commande suivante :
nano uwsgi.ini
Ce fichier contiendra les configurations uWSGI pour notre application comme indiqué ci-dessous :
[uwsgi]module =maincallable =appmaster =true
Enregistrez et fermez le fichier lorsque vous avez terminé. uWSGI est une option de déploiement pour Nginx qui est à la fois un protocole et un serveur d'applications.
Ensuite, vous devrez créer le fichier main.py pour importer l'instance Flask nommée app à partir du package d'application. Vous pouvez le créer avec la commande suivante :
nanomain.py
Ajoutez la ligne suivante :
depuis l'application d'importation d'applications
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, créez un fichier requirements.txt pour spécifier les dépendances que le gestionnaire de packages pip installera sur votre déploiement Docker :
nano requirements.txt
Ajoutez la ligne suivante qui correspond à la dernière version de Flask :
Flacon==1.1.2
Enregistrez et fermez le fichier lorsque vous avez terminé.
À ce stade, votre application Flask a été configurée avec succès. Vous pouvez maintenant passer à l'étape suivante.
Configurer Docker pour déployer Flask
Ensuite, vous devrez créer un Dockerfile pour créer et déployer une application flask.
Commencez par créer un Dockerfile avec la commande suivante :
cd /var/www/flask
nano Dockerfile
Ajoutez les lignes suivantes :
FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7RUN apk --update add bash nanoENV STATIC_URL /staticENV STATIC_PATH /var/www/app/staticCOPY ./requirements.txt /var/www/requirements. txtRUN pip install -r /var/www/requirements.txt
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, créez un script start.sh pour créer une image à partir du Dockerfile et créez un conteneur à partir de l'image Docker résultante.
nano start.sh
Ajoutez la ligne suivante :
#!/bin/bashapp="docker.test"docker build -t ${app} .docker run -d -p 56733:80 \ --name=${app} \ -v $PWD:/app ${app}
Enregistrez et fermez le fichier lorsque vous avez terminé.
Remarque :Assurez-vous que le port 56733 est libre et utilisable.
Enfin, exécutez le script à l'aide de la commande suivante :
bash start.sh
Cela créera l'image Docker et construira un conteneur à partir de l'image résultante, comme indiqué ci-dessous :
Envoi du contexte de construction au démon Docker 9.728kBÉtape 1/6 :DE tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7python3.6-alpine3.7 :Extraction de tiangolo/uwsgi-nginx-flask48ecbb6b270e :Extraction terminée 692f29ee68fa :Extraction terminée f75fc7ac1098 :Extraction terminée c30e40bb471c :Extraction terminéeVous pouvez maintenant lister les conteneurs en cours d'exécution avec la commande suivante :
docker psVous devriez obtenir le résultat suivant :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES22cd2bd23c91 docker.test "/entrypoint.sh /sta…" Il y a environ une minute Up Environ une minute 443/tcp, 0.0.0.0:56733->80/tcp docker.testVous pouvez également vérifier le conteneur Docker en visitant l'URL http://your-server-ip:56733. Vous devriez voir l'écran suivant :
Déployer les fichiers modèles
Vous pouvez également déployer des fichiers modèles pour diffuser du contenu statique et dynamique. Vous pouvez créer un modèle de page d'accueil pour votre application avec la commande suivante :
application nano/templates/home.htmlAjoutez les codes suivants :
Bienvenue Flask Page d'accueil
Ceci est la page d'accueil de notre application flask.
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, vous devrez modifier le fichier views.py pour servir le fichier nouvellement créé :
nano app/views.pyMettez à jour le fichier comme indiqué ci-dessous :
from flask import render_templatefrom app import [email protected]('/')def home() :return "hello world!"@app.route('/template')def template() :return render_template('home .html')Enregistrez et fermez le fichier. Ensuite, vous devrez redémarrer les conteneurs Docker pour appliquer les modifications.
Vous pouvez redémarrer le conteneur Docker nommé docker.test avec la commande suivante :
docker arrête docker.test
docker démarre docker.testMaintenant, ouvrez votre navigateur Web et tapez l'URL http://your-server-ip:56733/template. Vous devriez voir votre modèle nouvellement créé dans l'écran suivant :
Conclusion
Toutes nos félicitations! vous avez déployé avec succès une application Flask avec Docker sur le serveur Debian 10. Vous pouvez maintenant répliquer l'application sur différents serveurs avec une reconfiguration minimale. N'hésitez pas à me demander si vous avez des questions.