Maîtriser Docker et Kubernetes : Déploiement et Scalabilité d'Applications Modernes
Exécution et Gestion des Conteneurs Docker
Introduction
Dans le monde de Docker, les images sont les briques de construction, mais ce sont les conteneurs qui donnent vie à nos applications. Un conteneur est une instance isolée et exécutable d'une image. Comprendre comment démarrer, surveiller, interagir et arrêter ces conteneurs est fondamental pour maîtriser Docker. Cette leçon vous guidera à travers les commandes essentielles pour gérer le cycle de vie de vos conteneurs, depuis leur création jusqu'à leur suppression, en passant par l'inspection et l'interaction.
Nous allons explorer les commandes les plus couramment utilisées qui constituent le cœur de l'administration quotidienne des conteneurs Docker.
Le Cycle de Vie d'un Conteneur
Un conteneur Docker passe par plusieurs états au cours de son existence :
- Créé (Created) : Le conteneur a été préparé mais n'a pas encore démarré.
- En Cours d'Exécution (Running) : Le conteneur est actif et exécute son processus principal.
- En Pause (Paused) : Le processus du conteneur est suspendu.
- Arrêté (Exited) : Le processus principal du conteneur s'est terminé ou a été arrêté manuellement. Un conteneur arrêté n'est pas supprimé et peut être redémarré.
- Supprimé (Removed) : Le conteneur a été complètement retiré du système.
Démarrage de Conteneurs : docker run
La commande docker run est la plus fondamentale et la plus polyvalente pour lancer un nouveau conteneur. Elle combine deux opérations : docker create (créer une instance du conteneur à partir d'une image) et docker start (démarrer cette instance).
Syntaxe de Base
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
IMAGE: Le nom de l'image à partir de laquelle le conteneur sera créé (par exemple,nginx,ubuntu).COMMAND: La commande à exécuter à l'intérieur du conteneur. Si non spécifiée, la commande par défaut définie dans l'image est utilisée.ARG...: Arguments passés à la commande.
Options Essentielles de docker run
Voici quelques-unes des options les plus importantes et les plus fréquemment utilisées :
-dou--detach: Lance le conteneur en mode détaché (en arrière-plan). Le processus Docker renvoie le contrôle du terminal immédiatement. Sans cette option, le conteneur s'exécute en mode attaché, et le terminal reste lié aux logs du conteneur.-pou--publish: Mappe un port de l'hôte à un port du conteneur. C'est crucial pour rendre les services du conteneur accessibles depuis l'extérieur.- Syntaxe :
-p <port_hôte>:<port_conteneur>ou-p <adresse_ip_hôte>:<port_hôte>:<port_conteneur>.
- Syntaxe :
--name: Attribue un nom spécifique au conteneur. Si non spécifié, Docker génère un nom aléatoire. Utiliser un nom facilite la référence au conteneur par la suite.-itou--interactive --tty: Connecte le terminal de l'hôte à l'entrée standard (stdin) du conteneur et alloue un pseudo-TTY. C'est essentiel pour interagir avec le conteneur, par exemple pour ouvrir un shell.--rm: Supprime automatiquement le conteneur après sa sortie. Très utile pour des conteneurs temporaires ou de test qui n'ont pas besoin de persister.-vou--volume: Monte un volume (un répertoire de l'hôte) dans le conteneur. Permet la persistance des données et le partage de fichiers. (Fera l'objet d'une leçon plus approfondie sur les volumes).--envou-e: Définit des variables d'environnement à l'intérieur du conteneur. Utile pour configurer des applications (ex:DATABASE_URL).
Exemple 1 : Lancer un Serveur Web Nginx
docker run -d -p 8080:80 --name mon-nginx nginx:latest
Explication du code :
docker run: Commande pour lancer un nouveau conteneur.-d: Démarre le conteneur en mode détaché (en arrière-plan). Vous récupérez immédiatement le contrôle de votre terminal.-p 8080:80: Mappe le port8080de votre machine hôte au port80du conteneur. Ainsi, toute requête surhttp://localhost:8080sur votre machine sera redirigée vers le serveur Nginx s'exécutant à l'intérieur du conteneur sur son port80.--name mon-nginx: Donne le nommon-nginxà ce conteneur. Cela permet de le référencer plus facilement par la suite au lieu d'utiliser son ID.nginx:latest: Indique l'image à utiliser. Docker tentera de télécharger l'imagenginxavec le taglatestsi elle n'est pas déjà présente localement.
Après avoir exécuté cette commande, vous devriez pouvoir accéder à la page d'accueil par défaut de Nginx en ouvrant votre navigateur et en allant à http://localhost:8080.
Exemple 2 : Lancer un Conteneur Interactif
docker run -it --rm ubuntu:latest bash
Explication du code :
docker run: Lance un nouveau conteneur.-it: Combinaison de-i(interactive) et-t(tty). Cela connecte votre terminal à l'entrée standard du conteneur et alloue un pseudo-terminal, vous permettant d'interagir avec lui comme si vous étiez directement connecté à un serveur Linux.--rm: Le conteneur sera automatiquement supprimé dès que vous quitterez le shell (son processus principal se terminera). Idéal pour les tests rapides.ubuntu:latest: L'image de base Ubuntu à utiliser.bash: La commande à exécuter à l'intérieur du conteneur. Ici, elle démarre un shell Bash. Vous serez alors dans le prompt du conteneur Ubuntu.
Une fois dans le conteneur, vous pouvez taper des commandes Linux comme ls, pwd, etc. Pour quitter, tapez exit.
Inspection et Surveillance des Conteneurs
Une fois vos conteneurs lancés, il est essentiel de pouvoir les surveiller et obtenir des informations sur leur état.
Lister les Conteneurs : docker ps
La commande docker ps est utilisée pour lister les conteneurs en cours d'exécution.
docker ps
Options utiles :
-aou--all: Affiche tous les conteneurs, y compris ceux qui sont arrêtés.-sou--size: Affiche la taille des conteneurs.--filter: Filtre les conteneurs en fonction de divers critères (par exemple,--filter "status=exited").--format: Permet de formater la sortie selon vos besoins (par exemple,--format "{{.ID}}\t{{.Names}}\t{{.Status}}").
Visualiser les Logs : docker logs
Pour déboguer ou simplement comprendre ce qu'un conteneur est en train de faire, ses logs sont essentiels.
docker logs [OPTIONS] CONTAINER
Exemple :
docker logs mon-nginx
Options utiles :
-fou--follow: Suit les logs en temps réel (commetail -f).--tail <nombre_de_lignes>: N'affiche que lesnombre_de_lignesdernières lignes des logs.--since <temps>: Affiche les logs depuis une période spécifique (ex:--since 5mpour les 5 dernières minutes).
Inspecter un Conteneur : docker inspect
Cette commande fournit des informations très détaillées sur la configuration et l'état d'un conteneur au format JSON.
docker inspect CONTAINER
Exemple :
docker inspect mon-nginx
Cette commande affichera un grand bloc JSON avec des informations sur les volumes montés, les ports mappés, l'état du réseau, les variables d'environnement, et bien plus encore.
Statistiques d'Utilisation des Ressources : docker stats
docker stats affiche en temps réel l'utilisation des ressources (CPU, mémoire, E/S réseau et disque) par les conteneurs.
docker stats
Cette commande fournit une vue dynamique très utile pour surveiller la performance de vos conteneurs.
Gestion du Cycle de Vie
Au-delà du démarrage, vous aurez besoin de contrôler l'état de vos conteneurs.
Démarrer des Conteneurs Arrêtés : docker start
docker start CONTAINER [CONTAINER...]
Exemple :
docker start mon-nginx
Redémarre un ou plusieurs conteneurs qui ont été précédemment arrêtés.
Arrêter des Conteneurs : docker stop et docker kill
-
docker stop: Arrête un conteneur en envoyant un signalSIGTERM(signal d'arrêt gracieux), puis unSIGKILL(arrêt forcé) après un délai par défaut de 10 secondes si le conteneur ne s'est pas arrêté. C'est la méthode préférée pour arrêter un conteneur afin qu'il puisse nettoyer ses processus.docker stop CONTAINER [CONTAINER...]Exemple :
docker stop mon-nginx -
docker kill: Arrête un conteneur immédiatement en envoyant directement un signalSIGKILL. Utilisez cette commande uniquement sidocker stopéchoue, car elle ne permet pas au conteneur de s'arrêter proprement.docker kill CONTAINER [CONTAINER...]Exemple :
docker kill mon-nginx
Redémarrer un Conteneur : docker restart
Cette commande arrête et redémarre un conteneur. C'est pratique pour appliquer des changements de configuration ou en cas de problème.
docker restart CONTAINER [CONTAINER...]
Exemple :
docker restart mon-nginx
Mettre en Pause/Reprendre un Conteneur : docker pause et docker unpause
-
docker pause: Suspend tous les processus d'un ou plusieurs conteneurs. Le conteneur reste en mémoire et reprendra son exécution exactement là où il s'est arrêté.docker pause CONTAINER [CONTAINER...] -
docker unpause: Reprend les processus d'un ou plusieurs conteneurs mis en pause.docker unpause CONTAINER [CONTAINER...]
Ces commandes sont moins utilisées au quotidien mais peuvent être utiles pour des opérations de débogage ou des scénarios avancés.
Supprimer des Conteneurs : docker rm
Pour nettoyer votre système des conteneurs inutiles (arrêtés), utilisez docker rm.
docker rm [OPTIONS] CONTAINER [CONTAINER...]
Exemple :
docker rm mon-nginx
Options utiles :
-fou--force: Force la suppression d'un conteneur en cours d'exécution. Équivalent àdocker stoppuisdocker rm. À utiliser avec prudence.-vou--volumes: Supprime les volumes anonymes associés au conteneur.
Pour supprimer tous les conteneurs arrêtés d'un coup (très pratique pour le nettoyage) :
docker container prune
Ou une combinaison des commandes :
docker rm $(docker ps -a -q) # Supprime tous les conteneurs (en cours d'exécution et arrêtés)
Attention avec docker rm $(docker ps -a -q), cela supprimera tous vos conteneurs. Assurez-vous de bien comprendre les implications avant de l'exécuter.
Exécuter des Commandes dans un Conteneur en Cours d'Exécution : docker exec
Alors que docker run lance un nouveau conteneur, docker exec vous permet d'exécuter une nouvelle commande dans un conteneur déjà en cours d'exécution. C'est essentiel pour le débogage ou l'administration.
Syntaxe de Base
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
CONTAINER: Le nom ou l'ID du conteneur en cours d'exécution.COMMAND: La commande à exécuter à l'intérieur du conteneur.ARG...: Arguments passés à la commande.
Exemple 3 : Accéder à un Shell dans un Conteneur Nginx en Cours d'Exécution
docker exec -it mon-nginx bash
Explication du code :
docker exec: Commande pour exécuter une commande dans un conteneur existant.-it: Comme pourdocker run, ces options sont cruciales pour avoir un shell interactif.mon-nginx: Le nom du conteneur Nginx que nous avons lancé précédemment.bash: La commande à exécuter. Cela démarrera une session Bash à l'intérieur du conteneurmon-nginx.
Une fois connecté, vous pourrez naviguer dans le système de fichiers du conteneur, inspecter les fichiers de configuration de Nginx (par exemple, dans /etc/nginx/), ou exécuter d'autres utilitaires installés dans l'image. Pour quitter le shell, tapez exit.
Conclusion
La maîtrise de l'exécution et de la gestion des conteneurs Docker est une compétence fondamentale pour tout développeur ou administrateur système. Vous avez appris à :
- Lancer des conteneurs avec
docker run, en comprenant des options clés comme le mode détaché (-d), le mappage de ports (-p), le nommage (--name) et les interactions (-it,--rm). - Surveiller et inspecter l'état de vos conteneurs grâce à
docker ps,docker logs,docker inspectetdocker stats. - Contrôler le cycle de vie des conteneurs en les démarrant (
docker start), les arrêtant (docker stop,docker kill), les redémarrant (docker restart), ou en les supprimant (docker rm). - Exécuter des commandes directement à l'intérieur de conteneurs en cours d'exécution avec
docker execpour le débogage et l'administration.
Ces commandes constituent la base de votre interaction quotidienne avec Docker. Dans les leçons suivantes, nous approfondirons des sujets tels que la persistance des données avec les volumes, la communication entre conteneurs via le réseau Docker, et l'orchestration avec Docker Compose pour gérer des applications multi-conteneurs.