Cursus
Si vous vous demandez comment exécuter une image Docker, vous n'êtes pas seul. Que vous tiriez une image de Docker Hub ou que vous en construisiez une vous-même, l'exécuter est l'étape clé qui donne vie à votre application.
Ce tutoriel est votre guide pour débutants sur la commande docker run
et au-delà. Vous apprendrez :
- Ce que sont les images et les conteneurs Docker.
- Comment exécuter une image en utilisant différentes options.
- Et comment arrêter, supprimer et dépanner les conteneurs comme un pro.
À la fin, vous serez en mesure de lancer vos propres conteneurs et de comprendre exactement ce qui se passe sous le capot.
Comprendre les images et les conteneurs Docker
Avant d'aborder les exemples de commandes, nous allons comprendre les images et les conteneurs Docker en termes simples.
Si ces termes vous sont déjà familiers, n'hésitez pas à passer à la section suivante !
Qu'est-ce qu'une image Docker ?
Une image Docker est un modèle immuable pour votre application. Il définit tout ce dont votre conteneur a besoin : le code, les bibliothèques, l'environnement et les configurations. Une fois que vous avez une image, vous pouvez l'utiliser pour démarrer un conteneur ou une centaine. Il reste constant à chaque fois.
D'où viennent les images ? Dockerfile les construit. Un fichier Docker est l'endroit où vous définissez l'image de base à utiliser, les dépendances à installer et la façon dont votre application doit s'exécuter.
Une fois que votre fichier Docker est prêt, vous exécutez la commande docker build
. Cette commande suit les étapes du fichier et les transforme en une image réutilisable.
Qu'est-ce qu'un conteneur Docker ?
Un conteneur Docker est la version active d'une image Docker. Il permet à votre application de fonctionner dans son propre environnement isolé, garantissant un comportement cohérent quel que soit le système hôte.
Il suit l'approche "construire une fois, exécuter n'importe où", de sorte que vous n'avez pas à configurer manuellement l'environnement à chaque fois.
Image ou conteneur
Le tableau suivant compare une image et un conteneur côte à côte :
Image |
Conteneur |
Une image est un paquet standardisé qui comprend tous les fichiers, les binaires, les bibliothèques et les configurations nécessaires à l'exécution d'un conteneur. |
Une instance d'exécution d'une image. |
Une image est immuable. Cela signifie qu'il ne peut pas changer tant qu'il n'est pas reconstruit. |
Le conteneur est mutable. Vous pouvez le modifier pendant qu'il fonctionne, installer de nouveaux paquets ou modifier les fichiers de configuration. |
Un fichier Docker (un ensemble d'instructions pour construire une image) crée une image. |
Une image crée un conteneur. |
Votre ordinateur stocke des fichiers images. |
Un conteneur fonctionne dans votre mémoire. |
Si vous êtes novice en matière de conteneurisation, notre cours Introduction à Docker vous permet de découvrir les concepts de base à l'aide d'exemples pratiques.
La commande docker run
Lorsque vous exécutez la commande docker run
, vous demandez à Docker de créer un nouveau conteneur à partir d'une image.
En clair, vous lancez un programme dans un environnement isolé. Ce programme peut être n'importe quoi, une simple application web ou un service complet avec plusieurs processus.
Syntaxe de base
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[OPTIONS]
- Drapeaux supplémentaires pour personnaliser le fonctionnement du conteneurIMAGE
- Le nom de l'image Docker[COMMAND]
- (Facultatif) Remplace la commande par défaut dans l'image.[ARG...]
- (Facultatif) Arguments.
Options et drapeaux communs
-d
: Mode détaché : exécution des conteneurs en arrière-plan-p
: Mappage des ports : Pour accéder à un service (comme une API ou une application web) à partir de votre navigateur, vous devez exposer un port. Exemple :-p 3000:3000
fait correspondre le port 3000 de votre machine au port 3000 du conteneur.--name
: Docker donne au conteneur un nom par défaut, mais vous pouvez utiliser ce drapeau pour lui donner un nouveau nom.-v
: Vous l'utilisez pour séparer les données du conteneur lui-même, afin qu'elles soient conservées même si le conteneur est arrêté ou supprimé.--rm
: Lorsque le conteneur s'arrête, cet indicateur le supprime automatiquement.-e
: Utilisez-le pour transmettre des mots de passe de base de données ou des clés d'API sans les coder en dur dans votre application.
Exécution de conteneurs interactifs ou détachés
Docker exécute les conteneurs de deux manières : le mode interactif (-it
) et le mode détachement (-d
). Chaque mode a des cas d'utilisation spécifiques en fonction de vos objectifs.
-it
: Mode interactif : Si vous souhaitez travailler directement dans un conteneur à l'aide du terminal, vous pouvez utiliser le drapeau-it
. Il met le conteneur en mode interactif, ce qui vous permet de taper des commandes, de voir les résultats et de travailler en temps réel.-i
: Maintient l'entrée ouverte afin que vous puissiez taper des commandes dans le conteneur.-t
: Vous donne une interface de type terminal à l'intérieur du conteneur-d
: Mode détaché : Il exécute le conteneur en arrière-plan, ce qui permet à votre terminal de se consacrer à d'autres tâches.
Gardez les commandes clés et les meilleures pratiques à portée de main grâce à notre aide-mémoire Docker pour la science des données.
Extraction et exécution d'images Docker
Maintenant que vous connaissez la syntaxe de la commande docker run
, cette section vous montrera comment créer des images personnalisées et les exécuter.
Utilisation d'images provenant de Docker Hub
Docker Hub est une sorte de bibliothèque en ligne pour les images de conteneurs. Vous pouvez choisir des modèles prédéfinis ou télécharger le vôtre pour le partager avec d'autres. Il prend en charge les référentiels publics et privés, ce qui vous permet de partager des images ouvertement avec la communauté ou de mettre en place des contrôles d'accès pour vos équipes internes.
Exécution d'images personnalisées
Pour exécuter une image Docker, vous devez d'abord la construire à l'aide d'un fichier Docker. Ensuite, vous pouvez l'exécuter localement ou le pousser vers le Docker Hub pour le partager.
Commençons par créer un fichier Docker. En voici un exemple :
# Use official Python base image
FROM python:3.11-slim
# Set working directory in the container
WORKDIR /app
# Copy requirements file and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy the rest of the app code
COPY . .
EXPOSE 5000
# Set default command
CMD ["python", "app.py"]
Que signifie le fichier Docker ci-dessus ?
FROM python:3.11-slim
: image de base avec la version 3.11 de PythonWORKDIR /app
: Définit/app
comme répertoire de travail à l'intérieur du conteneur.COPY requirements.txt .
: déplace toutes les dépendances de la machine locale vers le répertoire app du conteneur.RUN pip install --no-cache-dir -r requirements.txt
: installe les dépendances indiquées dans le fichier requirements.txt.COPY . .
: copie le code du répertoire de travail actuel (applications, fichiers de configuration et autres) dans le répertoire app du conteneur.- CMD ["python", "app.py"] : exécute app.py lors du démarrage d'un conteneur à partir de cette image.
Étape 1. Construire le fichier Docker
Voyons ce qui se passe lorsque vous construisez ce fichier Docker.
- Exécutez la commande suivante :
docker build -t my-python-app .
Note : Pour que cette commande fonctionne, vous devez d'abord avoir configuré Docker dans votre système ; ce guide vous aide à le faire.
Voici ce qui se passe en coulisses lorsque vous exécutez la commande de construction :
- Docker lit le fichier Dockerfile
- L'image de base de Python est extraite de Docker Hub.
- Le répertoire de travail est fixé à
/app
. - Le site
requirements.txt
est copié dans le conteneur. - Les dépendances sont installées à l'aide de
pip install
. - Le reste de votre code est copié dans
/app
. - L'image finale est étiquetée
my-python-app
.
Étape 2 : Exécutez le fichier Docker
Une fois que votre image est construite, vous pouvez l'exécuter en utilisant :
docker run -p 5000:5000 my-python-app
Voici ce qui se passe lorsque vous l'exécutez :
- Un nouveau conteneur de votre image personnalisée,
my-python-app
, est créé. - Le port 5000 de votre machine est mappé au port 5000 du conteneur (
-p 5000:5000
). - Le fichier
CMD ["python", "
app.py"] est lancé et exécute l'application. - Le conteneur fonctionne en arrière-plan grâce à l'option
-d
(mode détaché).
À ce stade, vous pouvez visiter http://localhost:5000
dans votre navigateur et vous verrez quelque chose comme ce qui suit, ce qui signifie que votre application est en cours d'exécution :
Si vous travaillez dans le domaine de l'apprentissage automatique, ces meilleures images Docker pour le ML et l'IA peuventaccélérer la configuration de votre environnement.
Exécution d'images avec configuration
Pour certaines applications, vous pouvez avoir besoin d'exécuter des images avec une configuration spécifique. Voici deux exemples courants.
Persistance des données
Les conteneurs stockent temporairement des données. Lorsque vous les supprimez, les données disparaissent. Un volume est un moyen de stocker des données en dehors du conteneur afin qu'elles persistent même si le conteneur est supprimé ou redémarré.
Pour monter un volume, vous devez exécuter une commande telle que la suivante :
docker run -v my-volume:/app/data my-image
Les données écrites sur /app/data
sont sauvegardées dans le volume même après le retrait du conteneur.
Transmission de variables d'environnement
Les variables d'environnement transmettent les paramètres de configuration à un conteneur Docker au moment de l'exécution. Cela permet de personnaliser vos conteneurs Docker sans modifier vos images Docker.
Vous avez deux possibilités pour transmettre des variables d'environnement :
- Vous pouvez transmettre des variables d'environnement à l'aide du paramètre
-e
. Voici un exemple de commande :
docker run -e ENV=production -e DEBUG=False my-image
- Vous pouvez créer un fichier
.env
avec toutes les variables d'environnement et le transmettre à la commande. En voici un exemple :
docker run --env-file .env my-image
Exemple de fichier .env
:
ENV=staging
DEBUG=True
SECRET_KEY=mysecret
Gestion des conteneurs en cours d'exécution
Une fois qu'un conteneur est en cours d'exécution, vous pouvez le visualiser, l'arrêter et y accéder. Voyons comment procéder.
Visualisation des conteneurs actifs
Pour répertorier tous les conteneurs Docker actifs sur votre système, exécutez la commande docker ps
ou docker container ls
. Cette commande affiche l'ID du conteneur, l'image, la commande, le port, l'état et d'autres détails.
docker ps
# or
docker container ls
Pour inclure tous les conteneurs, et pas seulement ceux qui sont en cours d'exécution, comme ceux qui se sont éteints ou qui ont été créés mais pas démarrés, utilisez l'option -a
:
docker ps -a
Pour afficher uniquement le dernier conteneur créé, utilisez l' option -l
(last) :
docker ps -l
Si vous voulez voir tous les conteneurs triés par heure de création, les plus récents étant listés en premier, exécutez :
docker ps -a --sort=created
Arrêt et retrait des conteneurs
Pour arrêter un conteneur spécifique en cours d'exécution, utilisez la commande docker stop
suivie de l'ID ou du nom du conteneur :
docker stop <container_id_or_name>
Pour arrêter tous les conteneurs en cours d'exécution, utilisez
docker stop $(docker ps -q)
$(docker ps -q)
renvoie une liste de tous les ID de conteneurs en cours d'exécution.
Une fois qu'un conteneur est arrêté, vous pouvez le retirer à l'aide de la fonction :
docker rm <container_id_or_name>
Pour supprimer tous les conteneurs arrêtés, exécutez :
docker container prune
Pour aller plus loin et supprimer les conteneurs, volumes, réseaux et images inutilisés, consultez le guide Docker prune.
Accès aux journaux des conteneurs et au shell
- docker logs - La commande
docker logs
récupère par lots les journaux présents au moment de l'exécution. - docker exec -
docker exec
vous permet d'exécuter une nouvelle commande à l'intérieur d'un conteneur en cours d'exécution sans l'arrêter ou le redémarrer. C'est un peu comme si vous ouvriez un nouveau terminal dans votre conteneur, ce qui vous permet de fouiller, d'exécuter des scripts, de vérifier les journaux ou de déboguer. - docker attach -
docker attach
connecte votre terminal directement au processus principal d'un conteneur en cours d'exécution. Cela signifie que vous pouvez voir la sortie en direct du conteneur (journaux, invites, etc.) et même interagir avec lui si le processus accepte des entrées.
Dépannage des problèmes courants
Des solutions simples à des problèmes courants. Voici quelques erreurs courantes lors de l'exécution d'images Docker et la manière dont vous pouvez les résoudre.
Erreur 1 : "Réponse d'erreur du démon : pull access denied for alpine-python, repository does not exist or may require 'docker login' : denied : requested access to the resource is denied."
- Ce que cela signifie : Docker a essayé d'extraire une image, dans ce cas l' image
alpine-python
de Docker Hub, mais l'image n'existe pas ou est privée, et vous n'êtes pas authentifié. - Comment résoudre le problème :
- Vérifiez le nom et la balise de l'image sur Docker Hub.
- S'il s'agit d'une image privée, lancez
docker login
pour vous authentifier. - Assurez-vous que l'image existe si vous utilisez un registre personnalisé.
Erreur 2 : "Aucune image n'a été trouvée : <nom de l'image>:<tag>"
- Ce que cela signifie : Vous avez tenté d'exécuter ou de marquer une image localement, mais l'image (ou la marque spécifiée) n'est pas disponible sur votre système.
- Comment résoudre le problème :
- Utilisez
docker images
pourvérifier les images disponibles. - Tirez l'image de manière explicite :
- Utilisez
docker pull <image-name>:<tag>
Erreur 3 : "manifest for <image>:<tag> not found : manifest unknown : Le manifeste nommé n'est pas connu du registre".
- Ce que cela signifie : Cette erreur se produit probablement lorsque l'image ou la balise spécifiée n'existe pas.
- Corrections possibles : Ces conseils devraient permettre de résoudre la plupart des erreurs courantes :
- Vérifiez que l'image et le nom de la balise sont corrects.
- Reportez-vous aux les tags de l'image sur Docker Hub ou votre registre personnalisé.
- Utilisez
docker pull
pour obtenir une version valide.:
- Si vous construisez localement, utilisez une adresse
Dockerfile
correcte et construisez l'image avec :
docker build -t <image>:<tag> .
Conflits de ports et échecs de liaison
Les conflits de port se produisent lorsque plusieurs conteneurs ou un conteneur et une autre application tentent d'accéder au même port.
- Comment résoudre le problème :
- Utilisez un port hôte différent lorsque vous exécutez votre conteneur :
docker run -p 8081:80 <image>
- Arrêtez le service qui utilise actuellement le port.
- Identifiez ce qui utilise un port (par exemple, 8080) avec :
lsof -i :8080
Conclusion
L'exécution d'une image Docker est l'une des étapes les plus importantes de l'utilisation des conteneurs, qu'il s'agisse d'un simple serveur web ou du déploiement d'une application complexe. Avec seulement quelques commandes comme docker run
, docker ps
, et docker stop
, vous êtes maintenant équipé pour lancer, gérer et dépanner des conteneurs en toute confiance.
Si vous êtes prêt à aller plus loin, essayez de construire votre propre image avec un fichier Docker, explorez les drapeaux avancés de docker run
ou apprenez à gérer plusieurs conteneurs avec Docker Compose.
Consultez ces cours pour poursuivre votre voyage sur Docker :
- Docker intermédiaire: Apprenez la gestion avancée des images, des volumes et des applications multi-conteneurs.
- Concepts de conteneurisation et de virtualisation: Comprendre la théorie des conteneurs et leur différence avec les machines virtuelles.
- Conteneurisation et virtualisation avec Docker et Kubernetes: Un cursus d'apprentissage complet pour maîtriser Docker et démarrer avec Kubernetes.
Maîtriser Docker et Kubernetes
FAQ
Puis-je exécuter plusieurs conteneurs à partir de la même image Docker ?
Oui, vous pouvez faire fonctionner plusieurs conteneurs à partir de la même image. Chaque conteneur est isolé et peut avoir ses propres paramètres, ports et variables d'environnement.
Comment transmettre des secrets ou des clés d'API en toute sécurité à un conteneur Docker ?
Utilisez l'option -e
pour définir des variables d'environnement ou utilisez un fichier .env
et --env-file
pour transmettre des secrets au moment de l'exécution sans les coder en dur.
Comment exécuter une image Docker en arrière-plan ?
Utilisez l'option -d
avec docker run
pour démarrer le conteneur en mode détaché, ce qui permet au terminal de rester disponible pour d'autres commandes.
Quelle est la différence entre docker exec et docker attach ?
docker exec
ouvre une nouvelle session shell à l'intérieur du conteneur, tandis que docker attach
se connecte au processus principal du conteneur et à sa sortie en direct.
Pourquoi le message "pull access denied" apparaît-il lors de l'exécution d'une image ?
Cela signifie généralement que l'image est privée ou mal orthographiée. Vérifiez le nom, l'étiquette et assurez-vous que vous êtes connecté à Docker Hub avec docker login
.
Comment maintenir les données dans un conteneur après son arrêt ?
Utilisez l'option -v
pour monter un volume, ce qui garantit que les données sont stockées en dehors du conteneur et qu'elles restent intactes même après le retrait du conteneur.
Quelle est la meilleure façon de faire fonctionner un conteneur à des fins de développement ?
Utilisez les drapeaux -it
pour le mode interactif, ainsi que le montage de volumes et les variables d'environnement pour simuler un environnement de développement local.
Comment puis-je savoir quels ports sont en conflit sur mon ordinateur ?
Utilisez lsof -i :
pour identifier le processus qui utilise un port spécifique, puis arrêtez-le ou utilisez un port hôte différent pour votre conteneur.
Comment afficher les journaux d'un conteneur Docker en cours d'exécution ?
Utilisez la commande docker logs
pour récupérer et consulter les journaux des flux de sortie et d'erreur standard du conteneur.
Srujana est rédactrice technique indépendante et titulaire d'un diplôme de quatre ans en informatique. Écrire sur divers sujets, notamment la science des données, l'informatique en nuage, le développement, la programmation, la sécurité et bien d'autres encore, est pour elle une évidence. Elle aime la littérature classique et la découverte de nouvelles destinations.