Comment inspecter les modifications apportées au système de fichiers d'un conteneur Docker

0
113

Les conteneurs Docker héritent du système de fichiers de leur image lors de la création initiale. Le système de fichiers du conteneur peut diverger du contenu de l'image après la création si des modifications sont apportées à la couche inscriptible du conteneur.

La possibilité d'inspecter les modifications du système de fichiers peut aider vous déboguez les problèmes et examinez les données manquantes. Les fichiers écrits dans le système de fichiers du conteneur seront perdus lorsque ce conteneur sera redémarré ou détruit. Dans certains cas, vous pourriez être en train d'effectuer involontairement des écritures qui devraient être dirigées vers un volume persistant à la place.

Dans cet article, nous partagerons quelques techniques pour identifier les modifications apportées aux systèmes de fichiers de conteneur. Vous pouvez utiliser ces informations pour suivre l'activité des conteneurs et enquêter sur les écarts entre différents environnements.

Utilisation de Docker Diff

La CLI Docker a une commande intégrée à cet effet. L'exécution de docker diff énumérera toutes les modifications apportées aux fichiers et répertoires dans un conteneur particulier. Il accepte l'ID ou le nom du conteneur que vous souhaitez inspecter.

Démarrez un conteneur simple à des fins de démonstration :

$ docker run -it –name alpine alpine:latest sh

Cela démarrera un nouveau conteneur exécutant l'image Alpine. Votre fenêtre de terminal sera attachée au conteneur. Gardez cette fenêtre ouverte.

Exécutez maintenant docker diff dans une deuxième session de terminal :

$ docker diff alpine

Aucune sortie n'est produite car le nouveau conteneur correspond toujours exactement à l'image Alpine’ s filesystem.

Revenez à votre premier terminal encore attaché au conteneur. Exécutez quelques commandes qui ajoutent, suppriment ou modifient des fichiers :

/# démo tactile/# exemple tactile

Retournez à votre première fenêtre de shell. Répétez la commande docker diff pour voir les modifications apportées :

$ docker diff alpine A /example C /root C /root/.ash_history A /demo

Maintenant, les deux nouveaux fichiers sont visibles dans la sortie de la commande. Running touch a également ajouté des entrées à l'historique du shell du conteneur. La modification de /root/.ash_history est également signalée, ainsi que la modification conséquente du répertoire /root.

Interpreting Docker Diff Output

Chaque ligne de sortie produite par docker diff est préfixée par A, C ou D selon le type de changement qui s'est produit :

  • A – Le fichier ou le répertoire a été ajouté au système de fichiers du conteneur. Il n'existe pas dans l'image d'origine.
  • C – Le contenu du fichier ou du répertoire est différent de la version de l'image.
  • D – Un chemin présent dans l'image a été supprimé du conteneur.

Ces informations vous permettent de rechercher rapidement les écarts qui pourraient expliquer des données manquantes ou un comportement inattendu.

Toute modification du système de fichiers qui n'apparaît pas dans la sortie affectera les chemins mappés à un volume Docker. Ces fichiers sont stockés à l'extérieur du conteneur, indépendamment de son système de fichiers, de sorte qu'ils ne sont pas affichés par docker diff .

Affichage du contenu dans l'image d'origine

Il peut être utile de comparer la version du fichier incluse dans l'image d'origine. Vous pouvez le faire en créant un nouveau conteneur, puis en copiant le fichier. Utilisez docker create au lieu de docker run pour que le conteneur soit créé mais pas démarré. Cela garantira que les modifications causées par le script de point d'entrée de l'image n'affectent pas le résultat.

$ docker create –name temp-container my-image:latest $ docker cp temp-container:/chemin/vers/fichier fichier-copié $ docker rm conteneur temporaire

Une autre méthode consiste à exécuter le conteneur avec un point d'entrée personnalisé qui émet le contenu du fichier vers le flux de sortie standard. Incluez l'indicateur –rm pour que le conteneur soit automatiquement supprimé une fois la commande terminée :

$ docker run –rm –entrypoint cat alpine:latest /path/to/file > copyed-file

Comparaison des différences entre deux conteneurs

Parfois, vous devrez peut-être comparer les différences entre deux conteneurs différents exécutant la même image. Utilisez d'abord docker diff pour obtenir les listes de modifications individuelles :

$ docker diff premier conteneur > premier $ docker diff deuxième conteneur > second

Vous pouvez désormais utiliser des outils Unix standard tels que la commande diff pour rechercher les différences entre les deux listes de modifications :

diff first second 3c3 < Un /un-nouveau-fichier — > A /demo

Le diff montre que /a-new-file a été supprimé dans le deuxième conteneur tandis que /demo a été ajouté.

Une autre façon de comparer les conteneurs consiste à utiliser docker export et le tar commande pour accéder à une liste complète de fichiers :

$ docker export démo-conteneur | tar tv -rwxr-xr-x 0/0 0 2022-06-21 14:21 .dockerenv drwxr-xr-x 0/0 0 2022-05-23 17:51 bin/lrwxrwxrwx 0/0 0 2022-05- 23 17:51 bac/arche -> /bin/busybox lrwxrwxrwx 0/0 0 2022-05-23 17:51 bin/ash -> /bin/busybox lrwxrwxrwx 0/0 0 2022-05-23 17:51 bin/base64 -> /bin/busybox lrwxrwxrwx 0/0 0 2022-05-23 17:51 bin/bbconfig -> /bin/busybox …

Répétez cette commande pour vos deux conteneurs. Vous pouvez ensuite utiliser diff pour comparer les deux listes. La sortie améliorée de tar peut vous aider à savoir quand les fichiers ont été modifiés à mesure que les heures de modification et les autorisations sont affichées.

Résumé

Les systèmes de fichiers des conteneurs Docker doivent ressembler étroitement aux l'image à partir de laquelle ils ont été créés. Des divergences peuvent se produire lorsque le logiciel du conteneur écrit du contenu directement dans le système de fichiers. Les utilisateurs peuvent être une autre source de différences, lorsque des mécanismes tels que docker exec sont utilisés pour exécuter des commandes dans un conteneur en cours d'exécution.

L'utilitaire docker diff fournit un moyen pratique d'afficher ces modifications. Bien que vous ne puissiez pas voir pourquoi un fichier a été ajouté ou supprimé, la possibilité de récupérer une liste des modifications peut être inestimable pour comprendre pourquoi un comportement particulier est observé.

Dans cet article, nous avons’ Nous nous sommes concentrés sur l'examen des modifications apportées aux conteneurs en cours d'exécution. Vous pouvez utiliser différents outils tels que l'historique Docker et Dive pour inspecter les modifications apportées aux couches dans une image Docker. Les deux approches peuvent être utilisées en tandem, ce qui vous permet de déterminer le point exact auquel un fichier a été ajouté ou modifié dans la pile de couches d'un conteneur.

LIRE LA SUITE

  • &rsaquo ; Le Samsung Galaxy Z Flip 4 a des mises à niveau internes, pas des modifications de conception
  • › 10 excellentes fonctionnalités iPhone que vous devriez utiliser
  • › Examen du chargeur UGREEN Nexode 100 W : plus qu'assez de puissance
  • &rsaquo ; Test de la tablette Amazon Fire 7 (2022) : faible mais bon marché
  • › Pourquoi voulez-vous un Wi-Fi maillé, même si vous n'avez besoin que d'un seul routeur
  • &rsaquo ; 10 nouvelles fonctionnalités de Windows 11 que vous devriez utiliser