Docker est une solution gratuite et open-source pour développer, déployer et gérer des applications dans une virtualisation légère au niveau du système d'exploitation. Dans ce guide, nous allons faire la démonstration de la création d'une application Python dans un conteneur Docker.
Prérequis
Pour effectuer les étapes présentées dans ce guide, vous aurez besoin des composants suivants :
-
Un système Linux. Découvrez comment configurer votre propre VPS Ubuntu sur CloudSigma.
-
La dernière version de Docker est installée et configurée. En savoir plus sur l'installation de Docker on Ubuntu.
Conteneurs Docker
Lorsque vous exécutez plusieurs programmes au sein du même environnement, des problèmes peuvent survenir (et surviendront). Plus vous ajoutez de programmes, plus l'environnement devient instable. Ce n'est peut-être pas un problème majeur pour l'utilisateur moyen. Cependant, lorsqu'il s'agit d'applications critiques, les conséquences peuvent être graves.
Plus il y a d'applications introduites dans le système, plus la surface d'attaque est grande. Une seule application compromise peut facilement entraîner la chute de l'ensemble du système.
Pour résoudre ces problèmes, nous pouvons utiliser des conteneurs Docker pour le sandboxing au niveau logiciel :
-
Les applications au sein du conteneur auront un accès limité aux fichiers.
-
Les applications conteneurisées ne peuvent pas voir les autres processus s’exécuter dans le système.
-
Le conteneur peut se voir allouer une quantité spécifique de ressources matérielles.
-
Les ports réseau d’un conteneur ne sont pas exposés à l’extérieur.
-
Un empaquetage cohérent de presque tout à travers les environnements locaux et de production.
Pour faire la démonstration, nous allons construire un serveur Python simple dans un conteneur Docker, transformer le conteneur en image et déployer l'image dans un environnement de production fictif.
Étape 1 – Configuration du système de fichiers
Pour héberger le projet, nous allons d'abord créer un répertoire dédié :
|
1 |
mkdir -pv python-server-container/ |
|
1 |
cd !$ |
Dans le répertoire, créez un sous-répertoire src pour stocker notre code :
|
1 |
mkdir -pv src/ |
Étape 2 – Construction du serveur Python
Dans cette étape, nous allons créer un serveur HTTP simple en Python. Créez le fichier server.py:
|
1 |
touch server.py |
Ouvrez-le dans un éditeur de texte :
|
1 |
nano server.py |

Saisissez le code Python suivant :
|
1 2 3 4 5 6 7 8 9 10 11 |
from http.server import HTTPServer, SimpleHTTPRequestHandler def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler): """server entrypoint""" server_address = ("0.0.0.0", 8080) httpd = server_class(server_address, handler_class) print("starting server...") httpd.serve_forever() if __name__ == "__main__": run() |

Ici,
-
Nous utilisons la classe HTTPServer et demandons un gestionnaire à la bibliothèque Python standard, ce qui permet de garder le programme simple.
-
La fonction run initialise une instance de HTTPserver.
-
Comme le suggèrent les arguments de server_address, le serveur écoutera toute connexion entrante sur le port 8080.
Maintenant, nous allons vérifier si le serveur fonctionne comme prévu. Lancez le serveur :
|
1 |
python3 server.py |
![]()
Depuis un nouveau terminal, nous pouvons utiliser curl pour envoyer une requête au serveur :
|
1 |
curl -iv localhost:8080 |

Alternativement, vous pouvez accéder au lien dans un navigateur web :
|
1 |
http://localhost:8080 |
Étape 3 – Création d’un Dockerfile
Un Dockerfile contient les instructions nécessaires pour générer une image Docker. Les instructions du fichier sont suivies de manière séquentielle. En savoir plus sur Dockerfile.
Créez un nouveau Dockerfile pour notre projet :
|
1 |
touch Dockerfile |
Maintenant, nous allons y introduire les codes nécessaires. Ouvrez-le dans un éditeur de texte :
|
1 |
nano Dockerfile |
Saisissez le code suivant :
|
1 2 3 4 5 6 7 8 9 |
FROM python:latest ENV SRC_DIR /usr/bin/src/test_server/src COPY src/* ${SRC_DIR}/ WORKDIR ${SRC_DIR} ENV PYTHONUNBUFFERED=1 CMD ["python", "server.py"] |
Ici,
-
Tout Dockerfile doit commencer par la FROM directive. Dans notre cas, nous déclarons Python comme base de l'image Docker.
-
La directive ENV SRC_DIR spécifie l'emplacement du répertoire du conteneur.
-
La directive COPY copie les fichiers depuis le répertoire src qui héberge actuellement le serveur Python.
-
La variable PYTHONBUFFERED=1 spécifie que Python affichera et enregistrera la sortie directement dans STDOUT. Sinon, les journaux ne seraient envoyés à aucun tampon.
-
La directive CMD spécifie une commande par défaut à exécuter lors du lancement du conteneur. Dans ce cas, nous utilisons la directive pour lancer notre serveur Python.
Étape 4 – Génération de l'image Docker
Avec le Dockerfile prêt, nous pouvons maintenant créer une image. Exécutez la commande Docker suivante pour démarrer le processus :
|
1 |
docker build . -t python_server |

Ici,
-
L'option -t est utilisée pour étiqueter notre image Docker comme python_server.
-
Docker téléchargera tous les composants nécessaires et les combinera dans une image.
Étape 5 – Exécution de l'image
L'image est prête pour le déploiement. Nous pouvons l'exécuter à l'aide de la commande suivante :
|
1 |
docker run -p 8080:8080 python_server |

Ici, nous redirigeons le port 8080 de la machine locale vers l'image Docker en utilisant l'option -p .
Nous pouvons facilement valider si le serveur est opérationnel en utilisant curl:
|
1 |
curl -iv localhost:8080 |
Étape 6 – Arrêt du serveur
Depuis le terminal, appuyez sur “Ctrl + C” pour arrêter le processus Docker :

Étape 7 – Exportation et importation de l'image Docker
Nous disposons maintenant d'une image Docker fonctionnelle hébergeant notre serveur Python. Grâce aux fonctionnalités d'exportation et d'importation de Docker, nous pouvons la migrer vers n'importe quel autre système.
Tout d'abord, vérifiez la liste des images Docker sur le système actuel :
|
1 |
docker images |

Notre cible est l'image Docker python_server que nous venons de créer. La commande suivante l'exportera sous forme d'archive TAR :
|
1 |
docker save python_server:latest > python_server.tar |

Après avoir transféré le fichier python_server.tar vers la machine cible, utilisez la commande suivante pour importer l'image Docker :
|
1 |
docker load < python_server.tar |
Réflexions finales
Dans ce guide, nous avons démontré la création d'une image Docker à partir d'une application Python. Nous avons créé un serveur web Python simple et en avons généré une image Docker. L'image Docker peut désormais être déployée dans n'importe quel environnement avec un comportement cohérent.
Vous souhaitez en savoir plus sur Docker ? Consultez les guides suivants :
-
Créer et déployer une application Flask avec Docker sur Ubuntu 20.04
-
Comment sécuriser et mettre à l'échelle une application Django avec Docker, Nginx et Let’s Encrypt
-
Comment déployer WordPress avec des conteneurs Docker sur Ubuntu 20.04
Bon développement !




Commentaires
Aucun commentaire pour l'instant. Soyez le premier.