Neuf conseils Docker de pro pour les développeurs Node.js
11 avril 2024
0 minutes de lecture
Si vous passez beaucoup de temps en ligne de commande à travailler localement avec des images et des conteneurs Docker pour les créer et les tester, vous aurez peut-être envie de découvrir quelques commandes Docker avancées.
Nous faisons l’impasse sur les bases et passons directement aux commandes moins connues, mais très efficaces, qui peuvent considérablement améliorer votre expérience de Docker.
La sécurité de vos conteneurs Docker vous préoccupe ? Avant d’entrer dans le détail des commandes Docker, il est essentiel de reconnaître l’importance de la sécurité des conteneurs. C’est là que Snyk intervient. Snyk propose des solutions de sécurité robustes conçues pour les applications conteneurisées, qui vous aident à détecter et à corriger les vulnérabilités dans vos conteneurs et leurs dépendances. Commencez par intégrer Snyk à votre workflow pour renforcer votre sécurité.
Comment accéder au shell d’un conteneur Docker ?
Il est souvent nécessaire de déboguer des problèmes dans un conteneur, par exemple en examinant les journaux ou la structure du système de fichiers, ou en répondant à d’autres besoins pour valider ou confirmer une hypothèse. Vous pouvez aussi vouloir explorer le contenu d’une image Docker que vous avez créée en local.
Pour cela, utilisez les arguments de ligne de commande de Docker pour lancer un shell interactif. Vous devez d’abord démarrer un conteneur, y lancer un shell et y connecter votre terminal.
Voici comment ouvrir un shell pour une image Docker Node.js avec la commande run de Docker :
Vous pouvez exécuter la commande ci-dessus si le `Dockerfile` de l’image Docker ne spécifie pas d’`ENTRYPOINT`.
Comment connaître la version de Node.js dans une image Docker ?
Voici une astuce pratique pour savoir quelle version du runtime Node.js est installée dans votre image Docker. Cette information est essentielle pour vérifier la compatibilité, déboguer et garantir un comportement cohérent dans différents environnements.
Exécutez la commande suivante (en supposant que le programme d’analyse JSON `jq` est installé) :
La commande affiche les variables d’environnement de l’image Docker, y compris la version de Node.js. Vous pourriez, par exemple, voir :
Comment utiliser des images Docker optimisées pour Apple M1 ?
Docker a évolué pour prendre en charge l’architecture ARM, sur laquelle repose la puce M1, et propose des images de conteneurs spécialement optimisées pour cette architecture. Ces images offrent une meilleure compatibilité et des performances plus rapides sur les machines M1, ce qui est particulièrement utile, car de nombreux développeurs travaillent aujourd’hui sur des ordinateurs portables Apple.
Commencez par vérifier l’architecture de l’image. Avant d’exécuter un conteneur, vérifiez qu’il est compatible avec votre architecture. Cette commande vous permet de confirmer que vous utilisez une image optimisée pour M1 :
Lorsque vous récupérez des images depuis le registre Docker Hub, pensez à vérifier qu’elles sont optimisées pour M1 :
Si votre équipe crée des images Docker et les publie dans un registre privé ou public, vérifiez également que vous créez des images de conteneur spécifiques à M1. Elles fonctionneront ainsi sans problème sur différentes architectures de processeur et offriront une meilleure compatibilité :
Repérer les changements d’un conteneur avec Docker diff
La commande `docker diff` affiche les modifications apportées au système de fichiers d’un conteneur Docker depuis sa création. Elle révèle les fichiers ou répertoires qui ont été ajoutés, modifiés ou supprimés.
Voici à quoi ressemble la commande :
Cette commande renvoie la liste des modifications apportées au conteneur Docker. Pour chaque changement, Docker indique si le fichier ou le répertoire a été ajouté (A), modifié (C) ou supprimé (D).
La commande `docker diff` peut s’avérer utile avec un conteneur Docker Node.js si vous avez mis à jour des dépendances dans votre fichier `package.json` et souhaitez vérifier précisément ce qui a changé dans le répertoire `node_modules`. Exécutez la commande `docker diff` pour identifier les modifications.
Les avantages de `docker diff` pour détecter les vulnérabilités de sécurité
La commande `docker diff` peut également être un outil puissant dans votre arsenal de sécurité. Elle fournit rapidement une vue d’ensemble des modifications apportées au système de fichiers d’un conteneur Docker, qui peuvent révéler des changements non autorisés ou des activités suspectes.
Par exemple, si vous remarquez des modifications inattendues dans les fichiers de votre application Node.js, cela peut indiquer une faille de sécurité ou l’exploitation d’une vulnérabilité. En intégrant `docker diff` à vos vérifications régulières, voire à votre processus CI/CD, vous pouvez renforcer la sécurité de votre application et vous assurer que vos conteneurs Docker fonctionnent comme prévu.
Vous pouvez donc utiliser la commande `docker diff` pour effectuer un audit de sécurité de vos conteneurs Docker. En comparant l’état actuel du conteneur à l’image d’origine, vous pouvez repérer les écarts susceptibles de présenter un risque de sécurité.
Analysez vos images de conteneur Docker pour détecter les vulnérabilités et générer une SBOM
Snyk est une plateforme de sécurité qui propose une offre gratuite permanente conçue pour aider les développeurs à sécuriser leurs applications. Pour Docker, Snyk analyse vos images Docker afin d’y détecter les vulnérabilités et vous fournit un rapport détaillé ainsi que des recommandations de correction concrètes.
Pour analyser une image Docker d’un projet Node.js, commencez par vérifier que la CLI Snyk (interface en ligne de commande) est installée. Si ce n’est pas le cas, vous pouvez l’installer avec npm en exécutant :
Supposons maintenant que votre application Node.js possède une image Docker nommée `my-nodejs-app`. Vous pouvez l’analyser avec Snyk à l’aide de la commande suivante :
Cette commande demande à Snyk de rechercher les vulnérabilités connues dans l’image Docker nommée `my-nodejs-app`. Une fois l’analyse terminée, Snyk affiche la liste des vulnérabilités détectées dans l’image, classées par niveau de gravité :
Snyk peut également générer une nomenclature logicielle (SBOM) pour votre image Docker. Une SBOM répertorie tous les composants de l’image, y compris l’ensemble de ses dépendances et leurs versions. C’est très utile pour savoir ce que contient votre image Docker et repérer les vulnérabilités potentielles.
Voici comment générer une SBOM pour votre image Docker avec Snyk :
Comment obtenir l’ID SHA d’une image Docker ?
Il est essentiel d’utiliser l’ID SHA de l’image Docker pour référencer vos images avec précision, notamment dans les scripts automatisés ou pour garantir la cohérence entre les environnements. Cet identifiant est unique à chaque image et à chaque version, et il est plus précis que les tags.
Cette commande répertorie toutes vos images Docker avec leur condensat SHA256 complet. L’identifiant SHA s’affiche dans la colonne « IMAGE ID » :
Cas d’usage : épingler une image dans Docker Compose
Lorsque vous spécifiez une image dans un fichier Docker Compose, vous pouvez utiliser l’identifiant SHA à la place du tag pour épingler l’image sur une version précise. Vous utilisez ainsi toujours la version exacte de l’image avec laquelle vous avez testé votre application et évitez les changements inattendus si le tag de l’image est mis à jour.
L’utilisation de l’identifiant SHA dans les commandes Docker garantit cohérence et fiabilité, deux qualités essentielles dans les environnements de production et les pipelines CI/CD.
Comment obtenir l’adresse IP d’un conteneur Docker ?
Lorsque vous exécutez des applications Node.js avec des frameworks comme NestJS, Express ou Fastify dans des conteneurs Docker, vous avez souvent besoin de connaître l’adresse IP du conteneur.
Cette information peut être essentielle pour le débogage, l’analyse des journaux ou la connexion au serveur web exécuté dans le conteneur.
Comment inspecter les processus enfants Node.js dans un conteneur Docker ?
Comment les développeurs Node.js peuvent-ils mieux comprendre le fonctionnement de leurs applications conteneurisées afin de les surveiller et de résoudre les problèmes plus efficacement, notamment pour déterminer si un processus utilise plus de mémoire ou de ressources CPU que prévu ?
Utilisez cette commande Docker :
Lorsque vous travaillez avec des applications Node.js dans des conteneurs Docker, notamment si elles utilisent des processus enfants (fréquents dans les applications faisant appel à des clusters, des workers ou des sous-processus pour certaines tâches), il est essentiel de pouvoir examiner ces processus pour les déboguer et les surveiller.
Interroger les métadonnées d’une image conteneur Node.js via l’API Docker Registry
Vous avez parfois besoin d’informations détaillées sur l’image conteneur Node.js. Interroger directement l’API Docker Hub est une méthode efficace.
Cette approche vous donne accès à des métadonnées complètes sur l’image, essentielles pour comprendre les versions, les dépendances et d’autres caractéristiques clés.
Utilisez la commande suivante : elle s’appuie sur le programme `curl` pour envoyer la requête HTTP et sur le programme `jq` pour mettre en forme la réponse en JSON lisible :
Voici ce que vous pouvez attendre de la réponse :
Détails de l’image : informations telles que la taille de l’image, le condensat, l’architecture, et bien plus encore.
Informations sur les couches : découvrez comment l’image est construite.
Détails du tag : données spécifiques au tag « latest ».
Cette commande peut notamment être utile dans des scripts automatisés intégrés aux pipelines CI/CD pour effectuer des vérifications ou des mises à jour automatiques, ainsi que pour suivre les versions et vous assurer d’utiliser la bonne version de l’image Node.js selon les besoins de votre projet.
Vous êtes arrivé au bout !
Nous avons exploré différents scénarios, de la résolution des incohérences de version et des problèmes de performance à l’optimisation des opérations quotidiennes dans votre environnement Docker.
Pour conclure, cet article avait pour objectif de vous présenter un ensemble de commandes Docker avancées, bien au-delà des commandes classiques `docker run` et `docker ps`. Ces conseils de pro destinés aux professionnels du DevOps et du développement visent à simplifier vos processus de dépannage, de débogage et de gestion des conteneurs.
En intégrant ces conseils et ces commandes à votre workflow, n’oubliez pas que la maîtrise de Docker s’acquiert au fil du temps. Si vous développez en Node.js, poursuivez votre apprentissage avec ces 10 bonnes pratiques pour conteneuriser des applications web Node.js avec Docker. Si vous développez en Java, vous apprécierez l’article de Brian Vermeer : 10 bonnes pratiques pour créer des conteneurs Java avec Docker.
La sécurité des conteneurs, pensée pour les développeurs
Snyk détecte et corrige automatiquement les vulnérabilités dans les images de conteneurs et les workloads Kubernetes.
