# Questions de compréhension

## Sommaire
- [3.2 Mode détaché vs Mode non-détaché](#32-mode-détaché-vs-mode-non-détaché)
- [Question 1](#1-quelle-est-la-différence-entre-une-image-et-un-conteneur)
- [Question 2](#2-expliquez-la-différence-entre-docker-stop-et-docker-kill)
- [Question 3](#3-pourquoi-utilise-t-on-le-mode-détaché)
- [Question 4](#4-comment-vérifier-la-santé-dun-conteneur)
- [Question 5](#5-quels-sont-les-différents-états-possibles-dun-conteneur)

## 3.2 Mode détaché vs Mode non-détaché

Quand on utilise la commande `sudo docker run nginx`, le conteneur se lance directement dans le terminal, et on peut voir tous les messages générés pendant le démarrage du serveur Nginx. Cela permet de suivre ce qui se passe à l'intérieur du conteneur, mais l'inconvénient est que l'on reste "bloqué" dans le terminal, et les logs du conteneur continuent à s'afficher. Cela peut être gênant si on n'a pas besoin de ces informations et si on veut simplement que le conteneur fonctionne en arrière-plan.

En revanche, si on utilise la commande `sudo docker run -d nginx`, cela lance le conteneur en mode détaché, c'est-à-dire en arrière-plan. Dans ce cas, le conteneur démarre sans afficher les logs dans le terminal. Docker renvoie alors un identifiant unique pour le conteneur. Cet identifiant permet de revenir plus tard pour interagir avec le conteneur, par exemple pour vérifier son état ou l'arrêter, sans être dérangé par les messages qui s'afficheraient normalement.

La différence principale réside donc dans le fait qu'avec la commande sans `-d`, on reste dans le terminal et on voit tous les logs du conteneur, tandis qu'avec l'option `-d`, le conteneur tourne en arrière-plan et on reçoit seulement un ID pour pouvoir gérer le conteneur plus tard. Cela est particulièrement utile quand on veut que le conteneur fonctionne en arrière-plan sans encombrer le terminal.

## 1. Quelle est la différence entre une image et un conteneur ?

**Image** : Une image Docker est un fichier statique qui contient tout le nécessaire pour exécuter une application : le système d'exploitation, les bibliothèques, les fichiers d'application, et les configurations. C'est une sorte de "modèle" ou "gabarit" pour créer des conteneurs. Les images sont immuables (elles ne changent pas une fois créées).

**Conteneur** : Un conteneur est une instance en cours d'exécution d'une image. C'est un environnement isolé qui exécute une application et qui peut interagir avec d'autres conteneurs et services. Les conteneurs sont dynamiques, car vous pouvez les démarrer, arrêter, modifier, etc.

## 2. Expliquez la différence entre docker stop et docker kill

**docker stop** : Cette commande permet d'arrêter un conteneur en envoyant un signal SIGTERM (par défaut), puis un signal SIGKILL après un délai de grâce si le conteneur ne se ferme pas proprement. Le conteneur a l'opportunité de terminer ses processus en cours avant de s'arrêter. Cela permet de fermer les applications proprement.

**docker kill** : Cette commande arrête immédiatement le conteneur en envoyant un signal SIGKILL, ce qui force le conteneur à se terminer sans lui permettre de fermer ses processus de manière ordonnée. Cela arrête le conteneur de manière brutale.

## 3. Pourquoi utilise-t-on le mode détaché ?

Le mode détaché (avec l'option `-d` de la commande `docker run`) permet de lancer un conteneur en arrière-plan. Cela permet à l'utilisateur de continuer à travailler sur d'autres tâches dans le terminal tout en maintenant le conteneur en fonctionnement. En mode détaché, le terminal n'est pas bloqué par l'exécution du conteneur, ce qui est utile pour des services de longue durée, comme les serveurs web ou les bases de données.

## 4. Comment vérifier la santé d'un conteneur ?

On peut utiliser `docker ps` pour vérifier la santé d'un conteneur. Cette commande affiche tous les conteneurs en cours d'exécution avec leur statut, ce qui permet de s'assurer qu'ils fonctionnent correctement. Pour une inspection plus détaillée, on peut utiliser `docker inspect` pour obtenir des informations complètes sur le conteneur, ou `docker logs` pour examiner les journaux du conteneur.

## 5. Quels sont les différents états possibles d'un conteneur ?

Un conteneur peut se trouver dans les états suivants :

- **Created** : Le conteneur a été créé, mais il n'est pas encore démarré.
- **Running** : Le conteneur est en cours d'exécution.
- **Paused** : Le conteneur est en pause (les processus sont arrêtés temporairement, mais la mémoire et l'état sont conservés).
- **Exited** : Le conteneur a arrêté de fonctionner (normalement ou de manière anormale). Il est toujours présent, mais il ne tourne plus.
- **Dead** : Le conteneur est dans un état "mort", ce qui signifie qu'il a échoué de manière irrécupérable.