GNU/Linux >> Tutoriels Linux >  >> Linux

Comment analyser et comparer des images de conteneurs à l'aide de Container-diff

Dans ce didacticiel, nous allons apprendre ce qu'est Container-diff, comment installer Container-diff dans diverses distributions Linux et enfin comment analyser et comparer des images de conteneurs à l'aide de Container-diff.

Présentation

J'ai une bonne nouvelle pour ceux qui créent des applications sur des conteneurs.

Imaginez ce scénario. Vous êtes un développeur de logiciels. Vous travaillez sur une application, sur une image de conteneur d'exécution qui est maintenue par quelqu'un d'autre.

Au milieu du développement, le créateur original de l'image de conteneur publie une nouvelle version de cette image de base avec des packages système mis à jour.

Vous téléchargez l'image de base mise à jour et continuez à reconstruire votre application dessus. Soudain, votre application a cessé de fonctionner.

Vous avez réussi à le faire fonctionner dans l'image précédente, mais votre application n'a pas fonctionné dans la dernière image de base.

Vous êtes également à peu près sûr que l'application fonctionnait bien sur la version précédente des packages système dans l'image de base, mais vous ne savez pas laquelle. C'est là que "Container-diff" vient en aide.

Qu'est-ce que Container-diff ?

Container-diff est un outil open source de Google qui vous aide à analyser et à comparer les images de conteneurs hébergées sur la plate-forme cloud de Google .

Container-diff, est utilisé pour suivre facilement les modifications apportées entre les deux images de base, afin que vous puissiez mieux comprendre ce qui a vraiment changé à l'intérieur des images.

Cela vous fera gagner beaucoup de temps pour trouver l'incompatibilité de la version du package, et vous pouvez décider de reconstruire l'application sur la dernière image de conteneur ou simplement de conserver l'ancienne version jusqu'à ce que vous trouviez une solution de contournement appropriée.

Cela vous permet également d'examiner facilement si votre application fonctionnera ou non sur les nouvelles versions d'une image de conteneur.

Container-diff analyse les éléments suivants dans les images de conteneur.

  • Historique des images Docker
  • Système de fichiers d'image,
  • Taille de l'image,
  • Forfaits Apt,
  • Packages RPM,
  • paquets pip,
  • paquets npm.

Voyons maintenant comment installer Container-diff et comment l'utiliser pour comparer des images de conteneurs.

Installer Container-diff sous Linux

J'ai testé Container-diff sur un système Ubuntu. Cependant, cela devrait fonctionner sur Debian et d'autres variantes d'Ubuntu, ainsi que sur d'autres distributions Linux.

Tout d'abord, assurez-vous d'avoir installé Docker. Si vous ne l'avez pas déjà installé, consultez le lien suivant.

  • Comment installer Docker dans Ubuntu

Une fois Docker installé, installez Container-diff sur votre système Linux à l'aide des commandes suivantes :

$ curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64
$ sudo install container-diff-linux-amd64 /usr/local/bin/container-diff

Ou, si vous ne voulez pas utiliser sudo, exécutez :

$ curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64
$ mkdir -p "$HOME/bin" 
$ export PATH="$PATH:$HOME/bin"
$ install container-diff-linux-amd64 $HOME/bin/container-diff

Si vous êtes sur Arch Linux, vous pouvez installer Container-diff en utilisant la commande suivante :

$ sudo pacman -S container-diff

Analyser les images de conteneur

Commençons par analyser une image de conteneur, par exemple Debian 9, qui est stockée dans Google Container Registry. .

$ container-diff analyze gcr.io/google-appengine/debian9:latest

Exemple de résultat :

Retrieving image gcr.io/google-appengine/debian9:latest from source Cloud Registry
Retrieving analyses

-----Apt-----

Packages found in gcr.io/google-appengine/debian9:latest:
NAME VERSION SIZE
-adduser 3.115 849K
-apt 1.4.8 3.5M
-base-files 9.9 deb9u2 333K
-base-passwd 3.5.43 229K
-bash 4.4-5 5.7M
-bsdutils 1:2.29.2-1 238K
-ca-certificates 20161130 nmu1 468K
-coreutils 8.26-3 14.7M
-dash 0.5.8-2.4 204K
-debconf 1.5.61 558K
-debian-archive-keyring 2017.5 118K
-debianutils 4.8.1.1 213K
-diffutils 1:3.5-3 1.3M
-dpkg 1.18.24 6.6M
-e2fslibs 1.43.4-2 449K
-e2fsprogs 1.43.4-2 3.9M
-findutils 4.6.0 git+20161106-2 1.8M
-gcc-6-base 6.3.0-18 209K
-gpgv 2.1.18-8~deb9u1 721K
-grep 2.27-2 1.1M
-gzip 1.6-5 b1 231K
-hostname 3.18 b1 47K
-init-system-helpers 1.48 131K
-libacl1 2.2.52-3 b1 62K
-libapt-pkg5.0 1.4.8 3M
-libattr1 1:2.4.47-2 b2 42K
-libaudit-common 1:2.6.7-2 30K
-libaudit1 1:2.6.7-2 150K
-libblkid1 2.29.2-1 367K
-libbz2-1.0 1.0.6-8.1 96K
-libc-bin 2.24-11 deb9u1 3.3M
-libc6 2.24-11 deb9u1 10.4M
-libcap-ng0 0.7.7-3 b1 43K
-libcomerr2 1.43.4-2 83K
-libdb5.3 5.3.28-12 deb9u1 1.8M
-libdebconfclient0 0.227 67K
-libfdisk1 2.29.2-1 469K
-libgcc1 1:6.3.0-18 108K
-libgcrypt20 1.7.6-2 deb9u2 1.2M
-libgpg-error0 1.26-2 572K
-liblz4-1 0.0~r131-2 b1 93K
-liblzma5 5.2.2-1.2 b1 339K
-libmount1 2.29.2-1 403K
-libncursesw5 6.0 20161126-1+deb9u1 347K
-libpam-modules 1.1.8-3.6 874K
-libpam-modules-bin 1.1.8-3.6 220K
-libpam-runtime 1.1.8-3.6 1016K
-libpam0g 1.1.8-3.6 229K
-libpcre3 2:8.39-3 668K
-libselinux1 2.6-3 b3 209K
-libsemanage-common 2.6-2 39K
-libsemanage1 2.6-2 291K
-libsepol1 2.6-2 653K
-libsmartcols1 2.29.2-1 257K
-libss2 1.43.4-2 95K
-libssl1.1 1.1.0f-3 deb9u1 3.4M
-libstdc++6 6.3.0-18 2M
-libsystemd0 232-25 deb9u1 652K
-libtinfo5 6.0 20161126-1+deb9u1 478K
-libudev1 232-25 deb9u1 222K
-libustr-1.0-1 1.0.4-6 258K
-libuuid1 2.29.2-1 107K
-login 1:4.4-4.1 2.7M
-lsb-base 9.20161125 49K
-mawk 1.3.3-17 b3 183K
-mount 2.29.2-1 444K
-multiarch-support 2.24-11 deb9u1 220K
-ncurses-base 6.0 20161126-1+deb9u1 340K
-ncurses-bin 6.0 20161126-1+deb9u1 536K
-netbase 5.4 44K
-openssl 1.1.0f-3 deb9u1 1.2M
-passwd 1:4.4-4.1 2.4M
-perl-base 5.24.1-3 deb9u2 7.4M
-sed 4.4-1 799K
-sensible-utils 0.0.9 110K
-sysvinit-utils 2.88dsf-59.9 110K
-tar 1.29b-1.1 2.7M
-tzdata 2017c-0 deb9u1 2.9M
-util-linux 2.29.2-1 3.5M
-zlib1g 1:1.2.8.dfsg-5 156K

Comme vous pouvez le voir, Container-diff affiche l'analyse APT sans --type drapeau spécifié.

La liste des analyseurs disponibles est ;

  • --type=history [Historique]
  • --type=file [Système de fichiers]
  • --type=pip [Pip]
  • --type=apt [Apt]
  • --type=node [Nœud]

Vous pouvez exécuter plusieurs analyseurs à la fois comme ci-dessous.

$ container-diff analyze gcr.io/google-appengine/debian9:latest --type=history --type=apt --type=file

Comparer les images de conteneur à l'aide de Container-diff

Pour comparer deux images de conteneurs, utilisez la commande suivante :

$ container-diff diff gcr.io/google-appengine/debian9:latest gcr.io/google-appengine/debian9:2017-10-18-191738

Ici, je compare deux images de conteneur, la dernière image de build Debian 9 et une image Debian 9 construite le 18/10/2017.

Exemple de résultat :

Starting diff on images gcr.io/google-appengine/debian9:latest and gcr.io/google-appengine/debian9:2017-10-18-191738, using differs: [apt]
Retrieving image gcr.io/google-appengine/debian9:2017-10-18-191738 from source Cloud Registry
Retrieving image gcr.io/google-appengine/debian9:latest from source Cloud Registry
Computing diffs

-----Apt-----

Packages found only in gcr.io/google-appengine/debian9:latest: None

Packages found only in gcr.io/google-appengine/debian9:2017-10-18-191738: None

Version differences:
PACKAGE IMAGE1 (gcr.io/google-appengine/debian9:latest) IMAGE2 (gcr.io/google-appengine/debian9:2017-10-18-191738)
-libssl1.1 1.1.0f-3 deb9u1, 3.4M 1.1.0f-3, 3.4M
-openssl 1.1.0f-3 deb9u1, 1.2M 1.1.0f-3, 1.2M
-tzdata 2017c-0 deb9u1, 2.9M 2017b-1, 2.9M

Comme vous pouvez le voir dans la sortie, trois packages ont été mis à jour dans la dernière version.

S'il n'y a pas de différences entre les deux images, vous verrez une sortie comme ci-dessous.

Computing diffs

-----Apt-----

Packages found only in gcr.io/google-appengine/debian9:latest: None

Packages found only in gcr.io/google-appengine/debian9:2017-11-27-220229: None

Version differences: None

Comme je l'ai déjà dit, par défaut, sans --type flag spécifié, container-diff exécutera l'analyse du package Apt.

Nous pouvons exécuter plusieurs analyseurs à la fois, comme indiqué ci-dessous.

$ container-diff diff gcr.io/google-appengine/debian9:latest gcr.io/google-appengine/debian9:2017-10-18-191738 --type=history --type=apt --type=node

Ici, j'exécute trois analyseurs, à savoir l'historique , apt , et nœud .

Exemple de résultat :

Starting diff on images gcr.io/google-appengine/debian9:latest and gcr.io/google-appengine/debian9:2017-10-18-191738, using differs: [history apt node]
Retrieving image gcr.io/google-appengine/debian9:2017-10-18-191738 from source Cloud Registry
Retrieving image gcr.io/google-appengine/debian9:latest from source Cloud Registry
Computing diffs

-----Apt-----

Packages found only in gcr.io/google-appengine/debian9:latest: None

Packages found only in gcr.io/google-appengine/debian9:2017-10-18-191738: None

Version differences:
PACKAGE IMAGE1 (gcr.io/google-appengine/debian9:latest) IMAGE2 (gcr.io/google-appengine/debian9:2017-10-18-191738)
-libssl1.1 1.1.0f-3 deb9u1, 3.4M 1.1.0f-3, 3.4M
-openssl 1.1.0f-3 deb9u1, 1.2M 1.1.0f-3, 1.2M
-tzdata 2017c-0 deb9u1, 2.9M 2017b-1, 2.9M

-----History-----

Docker history lines found only in gcr.io/google-appengine/debian9:latest: None

Docker history lines found only in gcr.io/google-appengine/debian9:2017-10-18-191738: None

-----Node-----

Packages found only in gcr.io/google-appengine/debian9:latest: None

Packages found only in gcr.io/google-appengine/debian9:2017-10-18-191738: None

Version differences: None

Vous pouvez également comparer l'image stockée localement avec l'image distante, comme indiqué ci-dessous.

$ container-diff diff daemon://modified_debian:latest remote://gcr.io/google-appengine/debian9:latest

Pour plus de détails, consultez les liens officiels de Container-diff ci-dessous.


Linux
  1. Comment comparer des nombres et des chaînes dans le script shell Linux

  2. Pare-feu Raspberry Pi :comment l'installer et le gérer à l'aide d'UFW

  3. Comment graver une image ISO sur DVD et USB à l'aide de dd

  4. Comment alléger la charge de votre registre de conteneurs à l'aide de Quay.io

  5. Comment gérer les registres de conteneurs Linux

Comment zoomer et dézoomer des vidéos à l'aide de FFmpeg

Comment redimensionner des images à l'aide de Python

Comment recadrer et redimensionner des images sous Linux à l'aide de Gwenview

Comment utiliser la commande DD et comment graver ISO en l'utilisant

Comment pousser et tirer des images Docker avec le registre de conteneurs de DigitalOcean

Comment analyser les performances de base du système à l'aide de - vmstat, sar, iostat et mpstat