Image par auteur
Lors de la création d’applications avec Python, vous rencontrerez souvent des conflits de dépendances, des incompatibilités de versions, etc. Avec Docker, vous pouvez regrouper des applications, ainsi que les dépendances, le runtime et la configuration requis, dans un seul artefact portable appelé image. Que vous pouvez ensuite utiliser pour lancer un conteneur Docker qui exécute l’application.
Ainsi, qu’il s’agisse d’une simple application Python ou d’une application de science des données, Docker simplifie la gestion des dépendances. Ceci est particulièrement utile dans les projets de science des données où vous avez besoin de différentes bibliothèques et de versions spécifiques de ces bibliothèques pour que votre application fonctionne sans erreur. Avec Docker, vous pouvez disposer d’environnements isolés, cohérents et reproductibles pour toutes vos applications.
Comme premier pas dans cette direction, apprenons à conteneuriser une application Python.
Étape 1 : Commencer
D’abord, installer Docker sur la plateforme que vous utilisez. Vous pouvez exécuter Docker sur Windows, Linux et MacOs. Voici quelques choses que vous souhaiterez peut-être faire après avoir installé Docker sur votre ordinateur.
Le démon Docker se lie à un socket Unix, propriété du root
utilisateur par défaut. Vous ne pouvez donc y accéder qu’en utilisant sudo
. Pour éviter de préfixer toutes vos commandes Docker avec sudo
créer un docker
group ajoutez un utilisateur au groupe comme ceci :
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
Pour les versions plus récentes de Docker, BuildKit est le générateur par défaut. Toutefois, si vous utilisez une ancienne version de Docker, vous pouvez recevoir des avertissements de dépréciation lorsque vous exécutez le docker build
commande. En effet, l’ancien client de build sera obsolète dans les prochaines versions. Pour contourner le problème, vous pouvez installer buildx, un outil CLI pour utiliser les capacités de BuildKit. Et utilisez le docker buildx build
commande pour construire avec BuildKit.
Étape 2 : codez votre application Python
Ensuite, codez une application Python que nous pouvons conteneuriser à l’aide de Docker. Ici, nous allons conteneuriser un simple application de liste de tâches en ligne de commande. Le code de cette application est sur GitHub : fichier todo.py.
Vous pouvez conteneuriser n’importe quelle application Python de votre choix ou suivre l’exemple que nous utilisons ici. Si vous êtes intéressé par un didacticiel étape par étape sur la création de l’application TO-DO en ligne de commande, lisez Créez une application en ligne de commande avec Python en 7 étapes faciles.
Étape 3 : Créer le fichier Docker
Ensuite, nous allons créer un Dockerfile. Considérez-le comme une recette qui définit comment créer l’image Docker pour l’application. Créez un fichier nommé Dockerfile
dans votre répertoire de travail avec ce qui suit :
# Use Python 3.11 as base image
FROM python:3.11-slim
# Set the working directory in the container
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Command to run the Python script
CMD ["/bin/bash"]
Ici, nous utilisons Python 3.11 comme image de base. Nous définissons ensuite le répertoire de travail pour toutes les instructions suivantes avec le WORKDIR
commande. Nous utilisons ensuite le COPY
commande pour copier les fichiers du projet dans le système de fichiers du conteneur.
Parce que nous conteneurisons une application en ligne de commande, nous spécifions la commande à exécuter comme “/bin/bash”
. Ce qui démarre un shell bash interactif lorsque nous exécutons l’image et démarrons un conteneur.
Étape 4 : Créer l’image Docker
Nous avons notre fichier todo.py et Dockerfile prêts. Ensuite, nous pouvons créer l’image Docker avec la commande suivante :
docker build -t todo-app .
Avec le -t
dans la commande build, vous pouvez spécifier à la fois un nom et une balise comme ceci : docker build -t name:tag .
Cette commande crée une image Docker nommée todo-app
sur la base des instructions contenues dans le Dockerfile
. Le .
à la fin spécifie que le contexte de construction est le répertoire courant.
La construction prend quelques minutes :
Sending build context to Docker daemon 4.096kB
Step 1/4 : FROM python:3.11-slim
3.11-slim: Pulling from library/python
13808c22b207: Pull complete
6c9a484475c1: Pull complete
b45f078996b5: Pull complete
16dd65a710d2: Pull complete
fc35a8622e8e: Pull complete
Digest: sha256:dad770592ab3582ab2dabcf0e18a863df9d86bd9d23efcfa614110ce49ac20e4
Status: Downloaded newer image for python:3.11-slim
---> c516402fec78
Step 2/4 : WORKDIR /app
---> Running in 27d02ba3a48d
Removing intermediate container 27d02ba3a48d
---> 7747abda0fc0
Step 3/4 : COPY . /app
---> fd5cb75a0529
Step 4/4 : CMD ["/bin/bash"]
---> Running in ef704c22cd3f
Removing intermediate container ef704c22cd3f
---> b41986b633e6
Successfully built b41986b633e6
Successfully tagged todo-app:latest
Étape 5 : Exécutez votre conteneur Docker
Une fois l’image construite, vous pouvez démarrer un conteneur Docker à partir de l’image construite avec la commande suivante :
Le -it
l’option est une combinaison de -i
et -t
:
- Le
-i
L’option est utilisée pour exécuter des conteneurs de manière interactive et maintient STDIN ouvert même s’il n’est pas attaché. - Le
-t
L’option alloue un pseudo-ATS. Il fournit donc une interface de terminal au sein du conteneur avec laquelle vous pouvez interagir.
Désormais, notre application TO-DO s’exécute dans le conteneur Docker et nous pouvons interagir avec elle via la ligne de commande :
root@9d85c09f01ec:/app# python3 todo.py
usage: todo.py [-h] [-a] [-l] [-r]
Command-line Todo List App
options:
-h, --help show this help message and exit
-a , --add Add a new task
-l, --list List all tasks
-r , --remove Remove a task by index
root@9d85c09f01ec:/app# python3 todo.py -a 'walk 2 miles'
root@9d85c09f01ec:/app# python3 todo.py -l
1. walk 2 miles
Emballer
Et voila! Vous avez réussi à conteneuriser une application Python en ligne de commande à l’aide de Docker. Dans ce didacticiel, nous avons examiné la conteneurisation d’une application Python simple à l’aide de Docker.
Nous avons construit cette application en Python sans utiliser de bibliothèques Python externes. Nous n’avons donc pas défini de fichier Requirements.txt. Le fichier Requirements.txt répertorie généralement les différentes bibliothèques et leurs versions, que vous pouvez installer à l’aide d’un simple pip install
commande. Si vous souhaitez un didacticiel axé sur Docker pour la science des données, consultez Tutoriel Docker pour les data scientists.
Bala Priya C est un développeur et rédacteur technique indien. Elle aime travailler à l’intersection des mathématiques, de la programmation, de la science des données et de la création de contenu. Ses domaines d’intérêt et d’expertise incluent le DevOps, la science des données et le traitement du langage naturel. Elle aime lire, écrire, coder et prendre le café ! Actuellement, elle travaille à l’apprentissage et au partage de ses connaissances avec la communauté des développeurs en créant des didacticiels, des guides pratiques, des articles d’opinion, etc. Bala crée également des aperçus de ressources attrayants et des didacticiels de codage.