Aller au contenu principal

Fonctions ZSH - Personnaliser votre shell pour gérer Docker

Une collection de fonctions ZSH pour améliorer votre expérience du terminal, avec la gestion interactive des containers Docker grâce à fzf. Ouvrez de nouvelles sessions, arrêtez des containers et bien plus, sans effort.

· 8 minutes de lecture
Voir la source
Christophe
Amoureux de Markdown, WSL et Docker ~ Curieux insatiable.
Cet article existe aussi en anglais — lire la version originale.

Traduction automatique

Cette traduction a été produite par une IA. Elle peut contenir des contresens ou des maladresses, en particulier sur les termes techniques. En cas de doute, consultez l'article de référence en anglais — c'est lui qui fait foi.

Journal des modifications

Dernière
Adding drun

Fonctions ZSH - Personnaliser votre shell pour gérer Docker

⚡
TL;DR

Améliorez votre workflow dans le terminal avec des fonctions ZSH personnalisées pour gérer Docker de façon interactive. Cet article présente des outils comme dex, dstop et dnuke qui s'appuient sur fzf pour accéder rapidement à un shell, arrêter des containers, consulter les logs et nettoyer les ressources, sans rien mémoriser.

Au quotidien, j'utilise quelques fonctions ZSH que je trouve bien pratiques. Ces fonctions peuvent être ajoutées à votre fichier ~/.zshrc (ou, mieux, dans leur propre fichier — voir Au-delà du monolithe - Organiser son workflow ZSH comme un pro) pour améliorer votre expérience du terminal quand vous travaillez avec Docker. Elles offrent des moyens rapides et interactifs de gérer vos containers Docker sans devoir retenir des commandes précises ou des ID de containers (et soyons honnêtes, on les oublie vite !).

Dans cet article, je partage quelques-unes des fonctions ZSH que j'utilise pour gérer Docker : ouvrir une nouvelle session de terminal dans un container en cours d'exécution, arrêter des containers, accéder aux logs (même si le container est arrêté) et nettoyer les ressources inutilisées. Ces fonctions s'appuient sur fzf pour une sélection interactive, ce qui rend la gestion de votre environnement Docker bien plus simple, directement depuis votre terminal.

Comme ces fonctions reposent sur fzf, si vous ne l'avez pas installé, faites-le via votre gestionnaire de packages (par exemple sudo apt-get install fzf sur les systèmes basés sur Debian). Vous découvrez l'outil ? Commencez par lire Introduction à fzf - Fuzzy Finder.

Ouvrir une nouvelle session de terminal dans un container Docker en cours d'exécution​

Imaginez que vous voulez accéder rapidement à un container Docker en cours d'exécution sans devoir retenir son nom ou son ID. La fonction dex fait exactement cela. Elle liste tous les containers en cours d'exécution et vous laisse en choisir un pour y ouvrir une nouvelle session de terminal.

Il suffit donc de lancer dex dans votre terminal pour accéder à n'importe lequel de vos containers Docker actifs. C'est particulièrement utile quand plusieurs containers tournent en même temps et que vous voulez sauter dans l'un d'eux sans chercher son nom ou son ID.

Utiliser dex pour ouvrir une nouvelle session de terminal dans un container Docker en cours d'exécution

Modifier la commande avant de l'exécuter

Appuyez sur Entrée pour sélectionner le container et démarrer la session, ou sur Ctrl+E pour récupérer la commande dans votre prompt et la modifier — pratique si vous voulez l'ajuster avant de la lancer, par exemple pour désactiver l'entrypoint ou monter un volume.

Accès root

Appuyez sur Ctrl+R pendant la sélection d'un container avec dex pour ouvrir la session en root. Utile quand vous devez effectuer des tâches d'administration dans le container qui exigent des privilèges élevés.

Filtrage

Lancez dex any_pattern pour ne garder dans la liste que les containers correspondant à ce motif.

Arrêter un ou plusieurs containers Docker en cours d'exécution​

dstop est une autre fonction bien utile : elle permet d'arrêter un ou plusieurs containers Docker actifs. Comme dex, elle utilise fzf pour offrir une interface interactive de sélection des containers à arrêter. Vous pouvez en sélectionner plusieurs grâce à la multi-sélection de fzf, c'est-à-dire en appuyant sur Tab pour cocher plusieurs containers avant d'appuyer sur Enter pour les arrêter.

Appuyez sur CTRL+A pour sélectionner tous les containers d'un coup.

Dans le panneau de droite, vous voyez les informations du ou des containers sélectionnés : nom, image, statut et ports. Cela vous aide à décider en connaissance de cause lesquels arrêter. Vous voyez aussi la consommation de ressources en direct (CPU, mémoire, I/O réseau, I/O disque), de quoi repérer les containers les plus gourmands avant de les arrêter.

Utiliser dstop pour arrêter un ou plusieurs containers Docker en cours d'exécution

Accéder aux logs d'un container Docker en cours d'exécution​

La fonction dlogs permet d'accéder aux logs d'un container Docker actif. Elle utilise également fzf pour proposer une interface interactive de sélection du container dont vous voulez voir les logs.

Dans le panneau de droite, vous voyez les logs du container sélectionné en temps réel. Très pratique pour le debug : vous suivez les logs au fur et à mesure. La molette de votre souris permet de les faire défiler.

La fonction dlogs pour accéder aux logs d'un container Docker en cours d'exécution

Nettoyer les containers, images, volumes et réseaux Docker inutilisés​

La fonction dnuke joue le rôle d'un assistant de nettoyage Docker intelligent et interactif, conçu pour récupérer de l'espace disque sans risquer de supprimer des ressources à l'aveugle. Contrairement à un simple docker system prune, dnuke commence par analyser votre environnement et vous présente un plan d'exécution dynamique, qui montre exactement ce qui peut être nettoyé (containers arrêtés, images dangling, volumes inutilisés et cache de build).

Le nettoyage se fait par étapes fines, ce qui vous permet d'ignorer certaines catégories si besoin. Par défaut, la fonction reste en mode « safe » et ne cible que les images dangling (sans tag).

dnuke accepte des flags CLI pour adapter son comportement :

Les flags de dnuke

  • Nettoyage en profondeur — dnuke -a (ou --all) supprime toutes les images inutilisées, pas seulement les dangling (comme docker image prune -a).
  • Non interactif — dnuke -y (ou --force) court-circuite l'assistant et confirme automatiquement toutes les étapes.
  • Aide — dnuke --help affiche la liste complète des options et des exemples d'utilisation.

Si l'environnement est déjà propre, l'assistant le détecte immédiatement et s'arrête sans poser de questions inutiles.

Afficher l'aide de dnuke pour voir les options disponibles

Lancer dnuke pour nettoyer les ressources Docker inutilisées

Créer un nouveau container​

La dernière fonction est drun : elle affiche la liste des images existantes et crée un nouveau container à partir de celle que vous choisissez.

Filtrage

Lancez drun any_pattern pour ne garder dans la liste que les images correspondant à ce motif.

Une seule pour les gouverner toutes​

La fonction dops est un wrapper autour des autres fonctions. Elle vous donne accès rapidement à toutes les autres avec une seule commande. Lancez simplement dops dans votre terminal : la liste des fonctions disponibles s'affiche. Vous choisissez celle qui vous intéresse et elle exécute la commande correspondante.

Éditez maintenant votre fichier ~/.zshrc et ajoutez la ligne suivante pour sourcer le fichier docker.zsh : [[ -f ~/.zsh/docker.zsh ]] && source ~/.zsh/docker.zsh. Les fonctions seront alors disponibles dans votre terminal.

Utiliser dops pour accéder au menu interactif des fonctions de gestion Docker

Quand vous ne savez pas encore quel container

dex, dstop et dlogs supposent que vous savez déjà quel container vous visez. Pour les moments où ce n'est pas le cas — cinq containers viennent de démarrer et il vous faut voir CPU, mémoire et logs côte à côte pour identifier le fautif — un dashboard vaut mieux qu'un menu. C'est le rôle de lazydocker, lancé dans un container.

Comment l'installer​

Éditez votre fichier ~/.zshrc et ajoutez les lignes suivantes à la fin :

fpath=(~/.zsh/docker-fns $fpath)

autoload -Uz _d_check_env _d_print_cmd _d_has_running_containers
autoload -Uz dex dlogs dnuke dops drun dstop

# Setup alias for the interactive menu
alias d='dops'

# Print quick reference menu only in interactive sessions to avoid breaking scripts
if [[ -o interactive ]]; then
echo -e "\033[1;30mDocker Utils loaded:\033[0m"
echo -e " \033[0;36mdex\033[0m (exec/root) \033[0;36mdlogs\033[0m (logs/json) \033[0;36mdstop\033[0m (stop/kill)"
echo -e " \033[0;36mdnuke\033[0m (clean) \033[0;36mdops\033[0m (menu/alias \033[1;32md\033[0m) \033[0;36mdrun\033[0m (create new container)"
fi

Créez ensuite le répertoire ~/.zsh/docker-fns et déplacez-y les fichiers de chaque fonction (dex, dlogs, dnuke, dops, drun, dstop). Vos fonctions restent ainsi organisées et faciles à maintenir — le même pattern fpath/autoload est détaillé dans Au-delà du monolithe - Organiser son workflow ZSH comme un pro.

📦 Mise en place du projet : ~/.zsh/docker-fns
Aide

Besoin d'aide ? Cliquez sur le bouton « Aide » ci-dessus pour les instructions de mise en place.


🦋 Rejoignez la conversation sur BlueskyUn compte Bluesky gratuit est nécessaire pour aimer, repartager ou commenter. Ce bloc interroge l'API publique de Bluesky directement depuis votre navigateur (sans cookie, sans connexion) — votre adresse IP parvient donc aux serveurs de Bluesky dès que cette section se charge.

Chargement des commentaires…

Cet article vous a-t-il été utile ?
Avez-vous suivi les étapes de cet article ?