# Conteneur Un conteneur est un processus isolé lancé à partir d’une image (qui est un système de fichiers figé + métadonnées). Un conteneur ne simule pas de matériel : il s’appuie directement sur les appels système du noyau hôte. Il partage le noyau du système hôte avec les autres conteneurs, ce qui le rend : - **Plus léger** : démarrage rapide, moins de mémoire consommée - **Plus éphémère** : il peut être créé, arrêté, supprimé en quelques secondes - **Plus reproductible** : il repose sur une image immuable --- ## Rappel : Conteneur vs Machine virtuelle | Élément | Machine virtuelle | Conteneur | |----------------------|------------------------------------|----------------------------------| | Isolation | Matériel (via hyperviseur) | Processus (via kernel namespaces) | | Système d'exploitation | Complet (OS invité, incluant sont propre noyau) | Partagé (OS hôte) | | Démarrage | Lent (plusieurs secondes / minutes) | Rapide (moins d'une seconde) | | Consommation | Lourde (RAM, disque, CPU) | Légère | --- ## Cycle de vie d’un conteneur Un conteneur passe par plusieurs états : - `created` : défini mais pas encore lancé - `running` : actif et en cours d’exécution - `paused` : suspendu temporairement - `stopped` : arrêté, mais ses données persistent - `removed` : supprimé du système > Note: Un container ayant un problème se retrouve en état `stopped` s'il y a eu des problèmes au démarrage. Le log est un outil précieux pour comprendre ce qui s'est passé. Dans ce cas, la commande suivante est très utile : ```bash docker logs idDuConteneur ``` --- ## Commandes essentielles ```bash # Lister les conteneurs actifs docker ps # Lister tous les conteneurs (même arrêtés) docker ps -a # Créer et démarrer un conteneur docker run nginx # Démarrer un conteneur en connaissant son nom docker start nginx # Démarrer un conteneur en connaissant son id docker start 6762aed... # Arrêter un conteneur docker stop # Supprimer un conteneur docker rm ``` L'id du conteneur est obtenu avec `docker ps` et correspond à l'item de la première colonne (`CONTAINER_ID`). Il s'agit d'un hash sha-256 de longueur max 64 caractères. **Docker** affiche souvent une version réduite et cette version réduite évite déjà des *collisions* (c'est-à-dire deux ressources portant le même nom). L'informaticien peut gagner encore plus de temps à la saisie des commandes en tapant les quelques premières symboles de l'id s'il est confiant qu'il n'y a pas de collisions ou d'ambiguïté. ![Image](images/docker-ps.png) ## Réflexion ::: question **Si je lance deux conteneurs à partir de l’image `ubuntu:24.04`, est-ce que j’ai deux systèmes d’exploitation qui tournent en parallèle ?** ::: Non. Vous n’avez **pas deux OS**, mais **deux processus isolés** qui partagent le **même noyau Linux** de la machine hôte. Chaque conteneur *se comporte comme* un Ubuntu, mais il ne contient **ni noyau**, ni init system complet. Il ne s’agit pas de vraies machines virtuelles.