03

Le couteau suisse : la CLI

Manipulation quotidienne des conteneurs via le Terminal

C'est ici que votre quotidien commence. Maîtriser l'interface en ligne de commande (CLI) de Docker est vital. Savoir démarrer, arrêter, s'introduire dans un conteneur et lire ses logs représente 80% du travail d'un développeur backend.

La création : docker run

La commande run est magique : elle combine un pull (téléchargement si l'image n'est pas trouvée), un create (instanciation) et un start (lancement du processus). C'est la commande la plus complexe de Docker, disposant de plus de 90 flags (options).

Terminal : Mode Interactif vs Détaché
# 1. Mode Interactif (Foreground) : Pratique pour explorer
# -i : Garde l'entrée standard ouverte
# -t : Alloue un pseudo-TTY (Affiche joliment le terminal)
docker run -it ubuntu bash

# Dès que vous tapez 'exit' dans ubuntu, le conteneur meurt.

# 2. Mode Détaché (Background) : Pour les serveurs (Web, BDD)
# -d : (detach) Le conteneur rend la main au terminal maître et tourne en fond
docker run -d nginx

# 3. Mode Avancé : Nommer et Exposer (Mapping de port)
# -p hôte:conteneur (Redirige les requêtes de votre PC vers le conteneur)
# --name : Attribue un nom lisible au lieu d'un hash aléatoire
docker run -d -p 8080:80 --name mon-serveur-web nginx

# 4. Mode Éphémère : Tâche unique (Script, Job, Test)
# --rm : Le Daemon supprimera automatiquement et définitivement le conteneur une fois le processus terminé
docker run --rm alpine echo "Hello World depuis une boîte noire"

Observation et cycle de vie : STOP / START / RM

Commande Explication & Usage réel
docker ps Affiche uniquement les conteneurs actuellement en cours d'exécution (Running).
docker ps -a Affiche tous les conteneurs (y compris ceux qui ont crashé ou terminés). (Astuce moderne : docker container ls -a)
docker stop ID Envoie un signal SIGTERM. Laisse au conteneur 10 secondes pour sauvegarder ses données et fermer proprement. S'il refuse, envoie un SIGKILL destructeur en force.
docker start ID Réveille (relance le processus principal) un conteneur arrêté avec la configuration initiale de son run.
docker rm -f ID Extrêmement courant. Force (-f) l'arrêt et la destruction totale (poubelle) du conteneur. Disparu à tout jamais.
💡 Astuce Gagne-Temps Inutile de copier-coller l'ID hexadécimal complet (ex: 8b1a23c4d5e6). Taper simplement docker stop 8b ou docker rm 8b1 suffit ! Docker est intelligent tant que les premiers caractères sont uniques.

S'infiltrer dans un conteneur tournant (\`docker exec\`)

On ne "SSH" pas dans un conteneur. À la place, on demande au Daemon d'injecter un nouveau processus secondaire (souvent un script bash) à l'intérieur du namespace isolé d'un conteneur qui est déjà en cours d'exécution.

Infiltration
# Exécuter une commande simple une seule fois
docker exec mon-serveur-web ls -la /usr/share/nginx/html

# S'introduire et prendre le contrôle total du shell interne
docker exec -it mon-serveur-web sh
# ou bash au lieu de sh, selon la distribution linux minimale utilisée.

Investigation des problèmes (\`docker logs\`)

Par défaut, dès qu'un processus crash dans un conteneur (ex: erreur de syntaxe PHP ou Node.js crachant une exception fatale), le conteneur s'arrête instantanément. Il faut le diagnostiquer.

Débogage
# Afficher TOUS les historiques de logs d'un conteneur
docker logs auth_api_db

# Afficher les 10 dernières lignes (-n 10) et écouter en temps réel (--follow ou -f)
docker logs -f -n 10 auth_api_db

# Surveiller les ressources live (Top mémoire / CPU)
docker stats