Fonctionnement et Manipulation des Conteneurs Docker

Un guide interactif pour réviser les concepts clés.



← Retour à l'accueil

1. Différence Image vs Conteneur

  • Une image est un modèle statique, un "snapshot" en lecture seule contenant une application et ses dépendances.
  • Un conteneur est une instance en cours d'exécution d'une image. C'est l'image qui prend vie en mémoire, avec un état et un processus utilisateur.

💡 Travaux Pratiques (TP)

Lister les images présentes sur votre machine et voir la différence avec les conteneurs en cours.

# 1. Voir les images que vous avez localement docker images # 2. Voir les conteneurs en cours d'exécution docker ps # 3. Voir tous les conteneurs (même arrêtés) docker ps -a

❓ Questionnaire

Un conteneur est-il modifiable, et une image l'est-elle ?

Réponse : Un conteneur est modifiable (son état change), mais une image est immuable (en lecture seule). Si vous modifiez un conteneur, les changements n'affectent pas l'image d'origine.

2. Création et Lancement de Conteneurs

La commande de base est docker run.

Options Clés :

  • -i (interactif) : Garde l'entrée standard (clavier) ouverte.
  • -t (TTY) : Alloue un terminal virtuel (pseudo-TTY). (Souvent utilisé ensemble : -it).
  • -d (detached) : Exécute le conteneur en arrière-plan.
  • --name <NOM> : Attribue un nom spécifique au conteneur.
  • -p <PORT_HOTE>:<PORT_CONTENEUR> : Mappe un port de l'hôte vers le conteneur.

Nature Éphémère :

Les modifications dans un conteneur sont perdues s'il est supprimé. Pour la persistance, on utilise des volumes.

💡 Travaux Pratiques (TP)

Lancez un serveur web Nginx en arrière-plan et accédez-y depuis votre navigateur.

# 1. Lance le conteneur "mon-nginx" en mode détaché (-d) # et mappe le port 8080 de votre machine au port 80 du conteneur docker run -d --name mon-nginx -p 8080:80 nginx:latest # 2. Ouvrez http://localhost:8080 dans votre navigateur. # 3. Arrêtez et supprimez le conteneur docker stop mon-nginx docker rm mon-nginx

❓ Questionnaire

Que fait la commande docker run -it ubuntu bash ?

Réponse : Elle crée et démarre un conteneur à partir de l'image ubuntu, vous attache à un terminal interactif (-it) et exécute la commande bash, vous donnant un shell à l'intérieur du conteneur.

3. Gestion du Cycle de Vie

Lister les Conteneurs :

  • docker ps : Affiche les conteneurs en cours d'exécution.
  • docker ps -a : Affiche tous les conteneurs (même arrêtés).

Démarrer / Arrêter :

  • docker start <NOM_OU_ID> : Démarre un conteneur arrêté.
  • docker stop <NOM_OU_ID> : Arrête un conteneur en cours.

Supprimer un Conteneur :

  • docker rm <NOM_OU_ID> : Supprime un conteneur arrêté.
  • docker rm -f <NOM_OU_ID> : Force la suppression (même s'il est en cours).

💡 Travaux Pratiques (TP)

Gérer le cycle de vie d'un conteneur hello-world.

# 1. Créez un conteneur (il s'exécute et s'arrête) docker run --name test-hello hello-world # 2. Voyez-le dans la liste des conteneurs arrêtés docker ps -a # 3. Redémarrez-le docker start test-hello # 4. Supprimez-le docker rm test-hello

❓ Questionnaire

Quelle est la différence entre docker stop et docker rm ?

Réponse : docker stop arrête le conteneur (il existe toujours mais ne tourne pas). docker rm supprime le conteneur (il doit être arrêté avant d'être supprimé).

4. Interagir avec les Conteneurs en Cours

Exécuter une Commande :

  • docker exec <NOM_OU_ID> <COMMANDE> : Exécute une commande dans un conteneur déjà en cours.
  • Exemple : docker exec -it mon-nginx bash ouvre un shell dans le conteneur "mon-nginx".
  • Quitter un shell `exec` : Tapez exit ou Ctrl + D. (Pour se détacher sans quitter : Ctrl + P puis Ctrl + Q).

Consulter les Logs :

  • docker logs <NOM_OU_ID> : Affiche les logs (sortie standard) du conteneur.
  • docker logs -f <NOM_OU_ID> : Suit les logs en temps réel.

💡 Travaux Pratiques (TP)

Lancez un conteneur Nginx et utilisez exec pour voir le contenu du fichier index.html par défaut.

# 1. Lancez un Nginx (s'il n'est pas déjà lancé) docker run -d --name mon-nginx -p 8080:80 nginx # 2. Exécutez 'cat' dans le conteneur pour lire le fichier docker exec mon-nginx cat /usr/share/nginx/html/index.html # 3. (Nettoyage) docker stop mon-nginx && docker rm mon-nginx

❓ Questionnaire

Quelle est la différence principale entre docker run et docker exec ?

Réponse : docker run crée un *nouveau* conteneur à partir d'une image. docker exec exécute une commande à l'intérieur d'un conteneur *existant* et déjà en cours d'exécution.

5. Transformer un Conteneur en Image (Commit)

  • Si des modifications ont été faites dans un conteneur (ex: installation d'outils), on peut sauvegarder cet état comme une nouvelle image.
  • Commande : docker commit <NOM_CONTENEUR> <NOM_NOUVELLE_IMAGE>
  • Attention : Cette méthode n'est pas recommandée pour la persistance des données (on préfère les volumes) ou pour créer des images (on préfère un Dockerfile). C'est utile pour du débogage ou des sauvegardes rapides.

💡 Travaux Pratiques (TP)

Installez l'outil curl dans un conteneur ubuntu et "committez" le changement dans une nouvelle image.

# 1. Lancez un conteneur ubuntu interactif docker run -it --name ubuntu-modifie ubuntu:latest bash # 2. (Dans le conteneur) Installez curl # apt-get update && apt-get install -y curl # exit # 3. (Sur l'hôte) Créez une image à partir du conteneur modifié docker commit ubuntu-modifie mon-ubuntu-avec-curl # 4. Vérifiez que la nouvelle image existe docker images | grep mon-ubuntu-avec-curl

❓ Questionnaire

Quelle est la méthode recommandée pour créer des images personnalisées (plutôt que docker commit) ?

Réponse : Utiliser un Dockerfile. Un Dockerfile est un fichier texte qui contient les instructions pour assembler une image de manière reproductible et automatisée.