{"id":407,"date":"2026-05-22T16:18:10","date_gmt":"2026-05-22T14:18:10","guid":{"rendered":"https:\/\/eryann.fr\/?p=407"},"modified":"2026-05-22T16:20:12","modified_gmt":"2026-05-22T14:20:12","slug":"fiche-api-flask-avec-docker","status":"publish","type":"post","link":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/","title":{"rendered":"Fiche API &#8211; FLASK  avec Docker"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">1. Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans un BTS CIEL ou SIO, tu vas souvent d\u00e9velopper des services r\u00e9seau capables d\u2019\u00e9changer des donn\u00e9es avec d\u2019autres applications. Les API REST occupent aujourd\u2019hui une place centrale dans les architectures modernes. On les retrouve dans les applications web, les outils d\u2019administration, les plateformes cloud, les objets connect\u00e9s ou encore les infrastructures DevOps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Flask permet de cr\u00e9er rapidement une API en Python avec une architecture simple et l\u00e9g\u00e8re. Docker apporte ensuite un environnement isol\u00e9 et reproductible pour ex\u00e9cuter cette API de mani\u00e8re fiable sur n\u2019importe quel serveur Linux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans cette fiche, tu vas apprendre \u00e0 :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>installer Flask ;<\/li>\n\n\n\n<li>cr\u00e9er une API REST simple ;<\/li>\n\n\n\n<li>conteneuriser l\u2019application avec Docker ;<\/li>\n\n\n\n<li>comprendre le fonctionnement r\u00e9seau ;<\/li>\n\n\n\n<li>exposer les bons ports ;<\/li>\n\n\n\n<li>s\u00e9curiser le d\u00e9ploiement ;<\/li>\n\n\n\n<li>diagnostiquer les erreurs courantes ;<\/li>\n\n\n\n<li>tester concr\u00e8tement les routes API.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019objectif consiste \u00e0 mettre en \u0153uvre une API Flask dans un conteneur Docker comme on le ferait dans un environnement professionnel.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Sommaire<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Introduction<\/li>\n\n\n\n<li>Sommaire<\/li>\n\n\n\n<li>Pr\u00e9sentation de Flask et Docker<\/li>\n\n\n\n<li>Installation de Docker sous Debian\/Ubuntu<\/li>\n\n\n\n<li>Architecture du projet Flask<\/li>\n\n\n\n<li>Cr\u00e9ation de l\u2019API Flask<\/li>\n\n\n\n<li>Cr\u00e9ation du conteneur Docker<\/li>\n\n\n\n<li>Construction et lancement du conteneur<\/li>\n\n\n\n<li>Tests de l\u2019API<\/li>\n\n\n\n<li>Gestion r\u00e9seau et pare-feu<\/li>\n\n\n\n<li>Fichiers importants<\/li>\n\n\n\n<li>Bloc de configuration complet<\/li>\n\n\n\n<li>Explications d\u00e9taill\u00e9es<\/li>\n\n\n\n<li>Exemples concrets<\/li>\n\n\n\n<li>Commandes utiles et d\u00e9pannage<\/li>\n\n\n\n<li>Logs et diagnostic<\/li>\n\n\n\n<li>Erreurs fr\u00e9quentes<\/li>\n\n\n\n<li>Bonnes pratiques de s\u00e9curit\u00e9<\/li>\n\n\n\n<li>Pour aller plus loin<\/li>\n\n\n\n<li>Liens utiles<\/li>\n\n\n\n<li>Propositions de TP<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Pr\u00e9sentation de Flask et Docker<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">3.1 Flask<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Flask est un micro-framework Python destin\u00e9 au d\u00e9veloppement web et aux API REST.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tu peux :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cr\u00e9er des routes HTTP ;<\/li>\n\n\n\n<li>recevoir des requ\u00eates JSON ;<\/li>\n\n\n\n<li>envoyer des r\u00e9ponses JSON ;<\/li>\n\n\n\n<li>g\u00e9rer des utilisateurs ;<\/li>\n\n\n\n<li>interfacer une base de donn\u00e9es ;<\/li>\n\n\n\n<li>cr\u00e9er des outils d\u2019administration.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple d\u2019utilisation :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API de supervision ;<\/li>\n\n\n\n<li>backend web ;<\/li>\n\n\n\n<li>outil de gestion r\u00e9seau ;<\/li>\n\n\n\n<li>serveur MQTT API ;<\/li>\n\n\n\n<li>portail d\u2019administration.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3.2 Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker permet d\u2019ex\u00e9cuter une application dans un conteneur isol\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le conteneur embarque :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python ;<\/li>\n\n\n\n<li>Flask ;<\/li>\n\n\n\n<li>les d\u00e9pendances ;<\/li>\n\n\n\n<li>la configuration.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tu \u00e9vites ainsi les probl\u00e8mes de compatibilit\u00e9 entre machines.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Installation de Docker sous Debian\/Ubuntu<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">4.1 Mise \u00e0 jour du syst\u00e8me<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt upgrade -y<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>apt update<\/code> : met \u00e0 jour la liste des paquets<\/li>\n\n\n\n<li><code>apt upgrade<\/code> : installe les nouvelles versions<\/li>\n\n\n\n<li><code>-y<\/code> : valide automatiquement<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4.2 Installation de Docker<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install docker.io -y<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>docker.io<\/code> : paquet Docker officiel Debian\/Ubuntu<\/li>\n\n\n\n<li><code>-y<\/code> : \u00e9vite la confirmation interactive<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4.3 V\u00e9rification du service<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status docker<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>systemctl<\/code> pilote les services systemd<\/li>\n\n\n\n<li><code>status<\/code> affiche l\u2019\u00e9tat du service Docker<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4.4 Activation automatique au d\u00e9marrage<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable docker<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>enable<\/code> active le d\u00e9marrage automatique du service<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4.5 Ajouter son utilisateur au groupe docker<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo usermod -aG docker $USER<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>usermod<\/code> modifie un utilisateur<\/li>\n\n\n\n<li><code>-aG<\/code> ajoute un groupe sans supprimer les autres<\/li>\n\n\n\n<li><code>docker<\/code> : groupe autoris\u00e9 \u00e0 utiliser Docker<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Recharge ensuite la session :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>newgrp docker<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Architecture du projet Flask<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">5.1 Arborescence<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flask-api\/<br>\u251c\u2500\u2500 app.py<br>\u251c\u2500\u2500 requirements.txt<br>\u251c\u2500\u2500 Dockerfile<br>\u2514\u2500\u2500 .dockerignore<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Cr\u00e9ation de l\u2019API Flask<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">6.1 Cr\u00e9ation du dossier<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir flask-api<br>cd flask-api<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6.2 Cr\u00e9ation du fichier app.py<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, jsonify, request<br><br>app = Flask(__name__)<br><br>@app.route(\"\/\")<br>def accueil():<br>    return jsonify({\"message\": \"API Flask op\u00e9rationnelle\"})<br><br>@app.route(\"\/ping\")<br>def ping():<br>    return jsonify({\"response\": \"pong\"})<br><br>@app.route(\"\/addition\", methods=&#91;\"POST\"])<br>def addition():<br>    data = request.get_json()<br><br>    a = data.get(\"a\", 0)<br>    b = data.get(\"b\", 0)<br><br>    resultat = a + b<br><br>    return jsonify({<br>        \"a\": a,<br>        \"b\": b,<br>        \"resultat\": resultat<br>    })<br><br>if __name__ == \"__main__\":<br>    app.run(host=\"0.0.0.0\", port=5000)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>@app.route()<\/code> cr\u00e9e une route HTTP<\/li>\n\n\n\n<li><code>GET<\/code> r\u00e9cup\u00e8re des informations<\/li>\n\n\n\n<li><code>POST<\/code> envoie des donn\u00e9es<\/li>\n\n\n\n<li><code>jsonify()<\/code> retourne du JSON valide<\/li>\n\n\n\n<li><code>0.0.0.0<\/code> \u00e9coute sur toutes les interfaces r\u00e9seau<\/li>\n\n\n\n<li><code>5000<\/code> correspond au port Flask par d\u00e9faut<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6.3 Cr\u00e9ation du fichier requirements.txt<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flask<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ce fichier liste les d\u00e9pendances Python.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Cr\u00e9ation du conteneur Docker<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">7.1 Cr\u00e9ation du Dockerfile<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le fichier <code>Dockerfile<\/code> d\u00e9crit comment construire le conteneur.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Construction et lancement du conteneur<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">8.1 Construction de l\u2019image Docker<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build -t flask-api .<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>build<\/code> construit l\u2019image<\/li>\n\n\n\n<li><code>-t<\/code> ajoute un nom<\/li>\n\n\n\n<li><code>.<\/code> utilise le dossier courant<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8.2 V\u00e9rification des images<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker images<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8.3 Lancement du conteneur<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -d -p 5000:5000 --name flask-api flask-api<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>run<\/code> d\u00e9marre un conteneur<\/li>\n\n\n\n<li><code>-d<\/code> lance en arri\u00e8re-plan<\/li>\n\n\n\n<li><code>-p 5000:5000<\/code> :\n<ul class=\"wp-block-list\">\n<li>port h\u00f4te : 5000<\/li>\n\n\n\n<li>port conteneur : 5000<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>--name<\/code> attribue un nom<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Tests de l\u2019API<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">9.1 Tester la route principale<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>curl http:\/\/127.0.0.1:5000\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9sultat :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"message\":\"API Flask op\u00e9rationnelle\"}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">9.2 Tester la route ping<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>curl http:\/\/127.0.0.1:5000\/ping<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">9.3 Tester la route POST<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST http:\/\/127.0.0.1:5000\/addition \\<br>-H \"Content-Type: application\/json\" \\<br>-d '{\"a\":10,\"b\":5}'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-X POST<\/code> force la m\u00e9thode POST<\/li>\n\n\n\n<li><code>-H<\/code> ajoute un header HTTP<\/li>\n\n\n\n<li><code>-d<\/code> envoie des donn\u00e9es JSON<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Gestion r\u00e9seau et pare-feu<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">10.1 Ports utilis\u00e9s<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Service<\/th><th>Port<\/th><\/tr><\/thead><tbody><tr><td>Flask<\/td><td>5000\/tcp<\/td><\/tr><tr><td>HTTP standard<\/td><td>80\/tcp<\/td><\/tr><tr><td>HTTPS<\/td><td>443\/tcp<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">10.2 Autoriser le port avec UFW<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw allow 5000\/tcp<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>allow<\/code> autorise le trafic<\/li>\n\n\n\n<li><code>5000\/tcp<\/code> cible Flask<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">10.3 V\u00e9rifier les r\u00e8gles<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw status verbose<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">10.4 Cas production<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En environnement r\u00e9el :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Flask ne doit pas \u00eatre expos\u00e9 directement ;<\/li>\n\n\n\n<li>on utilise g\u00e9n\u00e9ralement :\n<ul class=\"wp-block-list\">\n<li>Nginx ;<\/li>\n\n\n\n<li>Apache ;<\/li>\n\n\n\n<li>Traefik ;<\/li>\n\n\n\n<li>HAProxy.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Fichiers importants<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Fichier<\/th><th>R\u00f4le<\/th><\/tr><\/thead><tbody><tr><td><code>\/opt\/flask-api\/app.py<\/code><\/td><td>code principal Flask<\/td><\/tr><tr><td><code>\/opt\/flask-api\/requirements.txt<\/code><\/td><td>d\u00e9pendances Python<\/td><\/tr><tr><td><code>\/opt\/flask-api\/Dockerfile<\/code><\/td><td>construction du conteneur<\/td><\/tr><tr><td><code>\/var\/lib\/docker\/<\/code><\/td><td>stockage Docker<\/td><\/tr><tr><td><code>\/etc\/docker\/daemon.json<\/code><\/td><td>configuration Docker<\/td><\/tr><tr><td><code>\/var\/log\/docker.log<\/code><\/td><td>logs Docker selon configuration<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Bloc de configuration complet<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">12.1 Synth\u00e8se Markdown pour ta fiche bristol<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># API Flask avec Docker<br><br>## Installation Docker<br>```bash<br>sudo apt update<br>sudo apt install docker.io -y<br>sudo systemctl enable docker<br>sudo systemctl start docker<br>```<br><br>## Construction image<br>```bash<br>docker build -t flask-api .<br>```<br><br>## Lancement conteneur<br>```bash<br>docker run -d -p 5000:5000 --name flask-api flask-api<br>```<br><br>## V\u00e9rification<br>```bash<br>docker ps<br>docker logs flask-api<br>```<br><br>## Test API<br>```bash<br>curl http:\/\/127.0.0.1:5000\/<br>```<br><br>## Pare-feu<br>```bash<br>sudo ufw allow 5000\/tcp<br>```<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">12.2 Bloc de configuration Docker complet<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM python:3.12-slim<br><br>WORKDIR \/app<br><br>COPY requirements.txt .<br><br>RUN pip install --no-cache-dir -r requirements.txt<br><br>COPY app.py .<br><br>EXPOSE 5000<br><br>CMD &#91;\"python\", \"app.py\"]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>FROM<\/code> d\u00e9finit l\u2019image de base<\/li>\n\n\n\n<li><code>WORKDIR<\/code> cr\u00e9e le dossier de travail<\/li>\n\n\n\n<li><code>COPY<\/code> copie les fichiers<\/li>\n\n\n\n<li><code>RUN<\/code> ex\u00e9cute des commandes<\/li>\n\n\n\n<li><code>EXPOSE<\/code> documente le port<\/li>\n\n\n\n<li><code>CMD<\/code> lance l\u2019application<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Explications d\u00e9taill\u00e9es<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">13.1 Pourquoi utiliser Docker avec Flask<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker apporte plusieurs avantages :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>environnement identique partout ;<\/li>\n\n\n\n<li>d\u00e9ploiement rapide ;<\/li>\n\n\n\n<li>isolation ;<\/li>\n\n\n\n<li>portabilit\u00e9 ;<\/li>\n\n\n\n<li>facilit\u00e9 de sauvegarde ;<\/li>\n\n\n\n<li>int\u00e9gration DevOps.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tu peux lancer le m\u00eame conteneur :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sur Debian ;<\/li>\n\n\n\n<li>Ubuntu ;<\/li>\n\n\n\n<li>Proxmox ;<\/li>\n\n\n\n<li>cloud ;<\/li>\n\n\n\n<li>Raspberry Pi.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">13.2 Pourquoi utiliser Flask<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Flask reste tr\u00e8s adapt\u00e9 aux projets BTS :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>syntaxe simple ;<\/li>\n\n\n\n<li>rapide \u00e0 apprendre ;<\/li>\n\n\n\n<li>peu de d\u00e9pendances ;<\/li>\n\n\n\n<li>id\u00e9al pour comprendre HTTP et REST.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. Exemples concrets<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">14.1 API de supervision r\u00e9seau<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Routes possibles :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/api\/ping<br>\/api\/status<br>\/api\/temperature<br>\/api\/cpu<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">14.2 API pour un serveur MQTT<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tu peux interfacer :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mosquitto ;<\/li>\n\n\n\n<li>Node-RED ;<\/li>\n\n\n\n<li>MariaDB ;<\/li>\n\n\n\n<li>Grafana.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">14.3 API pour WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress peut interroger l\u2019API Flask :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>r\u00e9cup\u00e9ration JSON ;<\/li>\n\n\n\n<li>supervision ;<\/li>\n\n\n\n<li>affichage dynamique.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. Commandes utiles et d\u00e9pannage<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">15.1 Voir les conteneurs actifs<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker ps<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">15.2 Voir tous les conteneurs<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker ps -a<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">15.3 Arr\u00eater un conteneur<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker stop flask-api<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">15.4 Red\u00e9marrer<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker restart flask-api<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">15.5 Supprimer un conteneur<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker rm flask-api<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">15.6 Voir les logs<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker logs flask-api<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Options utiles :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-f<\/code> : suivi temps r\u00e9el<\/li>\n\n\n\n<li><code>--tail 50<\/code> : affiche les 50 derni\u00e8res lignes<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker logs -f --tail 50 flask-api<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">15.7 Acc\u00e9der au shell du conteneur<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec -it flask-api bash<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>exec<\/code> lance une commande<\/li>\n\n\n\n<li><code>-it<\/code> ouvre un terminal interactif<\/li>\n\n\n\n<li><code>bash<\/code> ouvre un shell<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. Logs et diagnostic<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">16.1 Logs Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Commande :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker logs flask-api<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tu peux voir :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>erreurs Python ;<\/li>\n\n\n\n<li>erreurs Flask ;<\/li>\n\n\n\n<li>requ\u00eates HTTP ;<\/li>\n\n\n\n<li>crashs applicatifs.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">16.2 Journal systemd Docker<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>journalctl -u docker<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>journalctl<\/code> lit les journaux systemd<\/li>\n\n\n\n<li><code>-u docker<\/code> filtre Docker<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">16.3 V\u00e9rifier les ports ouverts<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>ss -tulpn<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-t<\/code> TCP<\/li>\n\n\n\n<li><code>-u<\/code> UDP<\/li>\n\n\n\n<li><code>-l<\/code> \u00e9coute<\/li>\n\n\n\n<li><code>-p<\/code> processus<\/li>\n\n\n\n<li><code>-n<\/code> mode num\u00e9rique<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. Erreurs fr\u00e9quentes<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">17.1 Port d\u00e9j\u00e0 utilis\u00e9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Erreur :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bind: address already in use<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Diagnostic :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ss -tulpn | grep 5000<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">17.2 Flask inaccessible depuis le r\u00e9seau<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cause fr\u00e9quente :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app.run(host=\"127.0.0.1\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Solution :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app.run(host=\"0.0.0.0\")<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">17.3 D\u00e9pendance absente<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Erreur :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ModuleNotFoundError<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Solution :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e9rifie <code>requirements.txt<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. Bonnes pratiques de s\u00e9curit\u00e9<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00e9vite d\u2019ex\u00e9cuter Flask en mode debug ;<\/li>\n\n\n\n<li>utilise HTTPS avec un reverse proxy ;<\/li>\n\n\n\n<li>limite les ports expos\u00e9s ;<\/li>\n\n\n\n<li>applique les mises \u00e0 jour Docker ;<\/li>\n\n\n\n<li>filtre les acc\u00e8s avec UFW ;<\/li>\n\n\n\n<li>\u00e9vite d\u2019ex\u00e9cuter les conteneurs en root ;<\/li>\n\n\n\n<li>stocke les secrets dans des variables d\u2019environnement ;<\/li>\n\n\n\n<li>utilise des images officielles.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">19. Pour aller plus loin<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Tu peux approfondir :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Flask RESTful ;<\/li>\n\n\n\n<li>Gunicorn ;<\/li>\n\n\n\n<li>Docker Compose ;<\/li>\n\n\n\n<li>Nginx reverse proxy ;<\/li>\n\n\n\n<li>CI\/CD GitLab ;<\/li>\n\n\n\n<li>Kubernetes ;<\/li>\n\n\n\n<li>JWT ;<\/li>\n\n\n\n<li>Swagger\/OpenAPI ;<\/li>\n\n\n\n<li>SQLAlchemy ;<\/li>\n\n\n\n<li>authentification OAuth2.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">20. Liens vers : les sites officiels, les mooc ou autres contenus p\u00e9dagogiques qui font r\u00e9f\u00e9rences, etc<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Documentation officielle Flask<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/flask.palletsprojects.com\/en\/stable\">https:\/\/flask.palletsprojects.com\/en\/stable<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Documentation officielle compl\u00e8te de Flask. Tu y trouveras les routes, le routage, les templates, les r\u00e9ponses JSON et les bonnes pratiques.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Documentation officielle Docker<\/h2>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/docs.docker.com\/get-started\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Excellent point d\u2019entr\u00e9e pour comprendre les images, conteneurs, r\u00e9seaux et volumes Docker.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Documentation Dockerfile<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.docker.com\/reference\/dockerfile\">https:\/\/docs.docker.com\/reference\/dockerfile<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9f\u00e9rence officielle d\u00e9taill\u00e9e des instructions Dockerfile.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Documentation Debian Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/wiki.debian.org\/Docker\">https:\/\/wiki.debian.org\/Docker<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Documentation Debian sp\u00e9cifique \u00e0 l\u2019installation et \u00e0 l\u2019administration de Docker.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Documentation Ubuntu UFW<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/ubuntu.com\/server\/docs\/firewalls-ufw\">https:\/\/ubuntu.com\/server\/docs\/firewalls-ufw<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Documentation officielle Ubuntu sur le pare-feu UFW.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">OpenClassrooms \u2014 D\u00e9couvrez le fonctionnement des API REST<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/openclassrooms.com\/fr\/courses\/4668056-construisez-des-api-rest-avec-symfony\">https:\/\/openclassrooms.com\/fr\/courses\/4668056-construisez-des-api-rest-avec-symfony<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">M\u00eame si le cours utilise Symfony, les principes REST restent identiques et tr\u00e8s p\u00e9dagogiques.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">OpenClassrooms \u2014 D\u00e9couvrez Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/openclassrooms.com\/fr\/courses\/1768796-reprenez-le-controle-a-laide-de-linux\/6098926-utilisez-des-conteneurs-avec-docker\">https:\/\/openclassrooms.com\/fr\/courses\/1768796-reprenez-le-controle-a-laide-de-linux\/6098926-utilisez-des-conteneurs-avec-docker<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tr\u00e8s bon support pour d\u00e9buter Docker progressivement.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">RFC HTTP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9110\">https:\/\/datatracker.ietf.org\/doc\/html\/rfc9110<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9f\u00e9rence officielle du protocole HTTP.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">21. Propositions de TP pour s\u2019exercer<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">TP 1 \u2014 Cr\u00e9er une API ping<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Objectif :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cr\u00e9er une route <code>\/ping<\/code><\/li>\n\n\n\n<li>retourner du JSON<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">TP 2 \u2014 Ajouter une route POST<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Objectif :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>recevoir des donn\u00e9es JSON ;<\/li>\n\n\n\n<li>calculer une addition ;<\/li>\n\n\n\n<li>retourner le r\u00e9sultat.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">TP 3 \u2014 Ajouter une base SQLite<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Objectif :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>stocker des utilisateurs ;<\/li>\n\n\n\n<li>lire les donn\u00e9es via l\u2019API.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">TP 4 \u2014 S\u00e9curiser avec UFW<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Objectif :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ouvrir uniquement le port 5000 ;<\/li>\n\n\n\n<li>bloquer le reste.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">TP 5 \u2014 D\u00e9ployer derri\u00e8re Nginx<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Objectif :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>utiliser un reverse proxy ;<\/li>\n\n\n\n<li>activer HTTPS ;<\/li>\n\n\n\n<li>comprendre la s\u00e9paration frontend\/backend.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">TP 6 \u2014 Cr\u00e9er un docker-compose.yml<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Objectif :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>lancer Flask ;<\/li>\n\n\n\n<li>lancer MariaDB ;<\/li>\n\n\n\n<li>connecter les conteneurs ensemble.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction Dans un BTS CIEL ou SIO, tu vas souvent d\u00e9velopper des services r\u00e9seau capables d\u2019\u00e9changer des donn\u00e9es avec d\u2019autres applications. Les API REST occupent aujourd\u2019hui une place centrale dans les architectures modernes. On les retrouve dans les applications web, les outils d\u2019administration, les plateformes cloud, les objets connect\u00e9s ou encore les infrastructures DevOps. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[29,30],"tags":[32,31],"class_list":["post-407","post","type-post","status-publish","format-standard","hentry","category-administration-systeme","category-api","tag-docker","tag-flask"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fiche API - FLASK avec Docker - Eryann Breizh SecOps<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fiche API - FLASK avec Docker - Eryann Breizh SecOps\" \/>\n<meta property=\"og:description\" content=\"1. Introduction Dans un BTS CIEL ou SIO, tu vas souvent d\u00e9velopper des services r\u00e9seau capables d\u2019\u00e9changer des donn\u00e9es avec d\u2019autres applications. Les API REST occupent aujourd\u2019hui une place centrale dans les architectures modernes. On les retrouve dans les applications web, les outils d\u2019administration, les plateformes cloud, les objets connect\u00e9s ou encore les infrastructures DevOps. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/\" \/>\n<meta property=\"og:site_name\" content=\"Eryann Breizh SecOps\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-22T14:18:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-22T14:20:12+00:00\" \/>\n<meta name=\"author\" content=\"wpadmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"wpadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/eryann.fr\\\/index.php\\\/administration-systeme\\\/fiche-api-flask-avec-docker\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/eryann.fr\\\/index.php\\\/administration-systeme\\\/fiche-api-flask-avec-docker\\\/\"},\"author\":{\"name\":\"wpadmin\",\"@id\":\"https:\\\/\\\/eryann.fr\\\/#\\\/schema\\\/person\\\/d2ee98d2385cd045ed4fe1c07ca320b5\"},\"headline\":\"Fiche API &#8211; FLASK avec Docker\",\"datePublished\":\"2026-05-22T14:18:10+00:00\",\"dateModified\":\"2026-05-22T14:20:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/eryann.fr\\\/index.php\\\/administration-systeme\\\/fiche-api-flask-avec-docker\\\/\"},\"wordCount\":1329,\"publisher\":{\"@id\":\"https:\\\/\\\/eryann.fr\\\/#organization\"},\"keywords\":[\"docker\",\"flask\"],\"articleSection\":[\"Administration syst\u00e8me\",\"api\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/eryann.fr\\\/index.php\\\/administration-systeme\\\/fiche-api-flask-avec-docker\\\/\",\"url\":\"https:\\\/\\\/eryann.fr\\\/index.php\\\/administration-systeme\\\/fiche-api-flask-avec-docker\\\/\",\"name\":\"Fiche API - FLASK avec Docker - Eryann Breizh SecOps\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/eryann.fr\\\/#website\"},\"datePublished\":\"2026-05-22T14:18:10+00:00\",\"dateModified\":\"2026-05-22T14:20:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/eryann.fr\\\/index.php\\\/administration-systeme\\\/fiche-api-flask-avec-docker\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/eryann.fr\\\/index.php\\\/administration-systeme\\\/fiche-api-flask-avec-docker\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/eryann.fr\\\/index.php\\\/administration-systeme\\\/fiche-api-flask-avec-docker\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/eryann.fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fiche API &#8211; FLASK avec Docker\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/eryann.fr\\\/#website\",\"url\":\"https:\\\/\\\/eryann.fr\\\/\",\"name\":\"Eryann Breizh SecOps\",\"description\":\"Fiches techniques &amp; labs en syst\u00e8mes et r\u00e9seaux poor les \u00e9tudiants en BTS CEIL ET SIO\",\"publisher\":{\"@id\":\"https:\\\/\\\/eryann.fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/eryann.fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/eryann.fr\\\/#organization\",\"name\":\"Breizh Sec Ops\",\"url\":\"https:\\\/\\\/eryann.fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/eryann.fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/eryann.fr\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-088112b9-fd28-4b18-b02d-4d9dded3e900-e1777846396685.png\",\"contentUrl\":\"https:\\\/\\\/eryann.fr\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-088112b9-fd28-4b18-b02d-4d9dded3e900-e1777846396685.png\",\"width\":1246,\"height\":229,\"caption\":\"Breizh Sec Ops\"},\"image\":{\"@id\":\"https:\\\/\\\/eryann.fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/eryann.fr\\\/#\\\/schema\\\/person\\\/d2ee98d2385cd045ed4fe1c07ca320b5\",\"name\":\"wpadmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d71b4031c3d015de3ca68c137413277e548b331b07db0acf781b9379b798eb3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d71b4031c3d015de3ca68c137413277e548b331b07db0acf781b9379b798eb3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d71b4031c3d015de3ca68c137413277e548b331b07db0acf781b9379b798eb3e?s=96&d=mm&r=g\",\"caption\":\"wpadmin\"},\"sameAs\":[\"https:\\\/\\\/eryann.fr\"],\"url\":\"https:\\\/\\\/eryann.fr\\\/index.php\\\/author\\\/wpadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fiche API - FLASK avec Docker - Eryann Breizh SecOps","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/","og_locale":"fr_FR","og_type":"article","og_title":"Fiche API - FLASK avec Docker - Eryann Breizh SecOps","og_description":"1. Introduction Dans un BTS CIEL ou SIO, tu vas souvent d\u00e9velopper des services r\u00e9seau capables d\u2019\u00e9changer des donn\u00e9es avec d\u2019autres applications. Les API REST occupent aujourd\u2019hui une place centrale dans les architectures modernes. On les retrouve dans les applications web, les outils d\u2019administration, les plateformes cloud, les objets connect\u00e9s ou encore les infrastructures DevOps. [&hellip;]","og_url":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/","og_site_name":"Eryann Breizh SecOps","article_published_time":"2026-05-22T14:18:10+00:00","article_modified_time":"2026-05-22T14:20:12+00:00","author":"wpadmin","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"wpadmin","Dur\u00e9e de lecture estim\u00e9e":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/#article","isPartOf":{"@id":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/"},"author":{"name":"wpadmin","@id":"https:\/\/eryann.fr\/#\/schema\/person\/d2ee98d2385cd045ed4fe1c07ca320b5"},"headline":"Fiche API &#8211; FLASK avec Docker","datePublished":"2026-05-22T14:18:10+00:00","dateModified":"2026-05-22T14:20:12+00:00","mainEntityOfPage":{"@id":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/"},"wordCount":1329,"publisher":{"@id":"https:\/\/eryann.fr\/#organization"},"keywords":["docker","flask"],"articleSection":["Administration syst\u00e8me","api"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/","url":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/","name":"Fiche API - FLASK avec Docker - Eryann Breizh SecOps","isPartOf":{"@id":"https:\/\/eryann.fr\/#website"},"datePublished":"2026-05-22T14:18:10+00:00","dateModified":"2026-05-22T14:20:12+00:00","breadcrumb":{"@id":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/eryann.fr\/index.php\/administration-systeme\/fiche-api-flask-avec-docker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/eryann.fr\/"},{"@type":"ListItem","position":2,"name":"Fiche API &#8211; FLASK avec Docker"}]},{"@type":"WebSite","@id":"https:\/\/eryann.fr\/#website","url":"https:\/\/eryann.fr\/","name":"Eryann Breizh SecOps","description":"Fiches techniques &amp; labs en syst\u00e8mes et r\u00e9seaux poor les \u00e9tudiants en BTS CEIL ET SIO","publisher":{"@id":"https:\/\/eryann.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/eryann.fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/eryann.fr\/#organization","name":"Breizh Sec Ops","url":"https:\/\/eryann.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/eryann.fr\/#\/schema\/logo\/image\/","url":"https:\/\/eryann.fr\/wp-content\/uploads\/2026\/05\/cropped-088112b9-fd28-4b18-b02d-4d9dded3e900-e1777846396685.png","contentUrl":"https:\/\/eryann.fr\/wp-content\/uploads\/2026\/05\/cropped-088112b9-fd28-4b18-b02d-4d9dded3e900-e1777846396685.png","width":1246,"height":229,"caption":"Breizh Sec Ops"},"image":{"@id":"https:\/\/eryann.fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/eryann.fr\/#\/schema\/person\/d2ee98d2385cd045ed4fe1c07ca320b5","name":"wpadmin","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/d71b4031c3d015de3ca68c137413277e548b331b07db0acf781b9379b798eb3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d71b4031c3d015de3ca68c137413277e548b331b07db0acf781b9379b798eb3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d71b4031c3d015de3ca68c137413277e548b331b07db0acf781b9379b798eb3e?s=96&d=mm&r=g","caption":"wpadmin"},"sameAs":["https:\/\/eryann.fr"],"url":"https:\/\/eryann.fr\/index.php\/author\/wpadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/posts\/407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/comments?post=407"}],"version-history":[{"count":1,"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/posts\/407\/revisions"}],"predecessor-version":[{"id":408,"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/posts\/407\/revisions\/408"}],"wp:attachment":[{"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/media?parent=407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/categories?post=407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eryann.fr\/index.php\/wp-json\/wp\/v2\/tags?post=407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}