GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo analizar y comparar imágenes de contenedores usando Container-diff

En este tutorial, aprenderemos qué es Container-diff, cómo instalar Container-diff en varias distribuciones de Linux y, finalmente, cómo analizar y comparar imágenes de contenedores usando Container-diff.

Introducción

Tengo buenas noticias para aquellos que están creando aplicaciones en contenedores.

Imagina este escenario. Eres un desarrollador de software. Está trabajando en una aplicación, en una imagen de contenedor de tiempo de ejecución que mantiene otra persona.

En medio del desarrollo, el creador original de la imagen del contenedor lanza una nueva versión de esa imagen base con paquetes de sistema actualizados.

Descarga la imagen base actualizada y continúa reconstruyendo su aplicación en ella. De repente, su aplicación dejó de funcionar.

Ha logrado que funcione con éxito en la imagen anterior, pero su aplicación no funcionó en la imagen base más reciente.

También está bastante seguro de que la aplicación funcionó bien en la versión anterior de los paquetes del sistema en la imagen base, pero no tiene idea de cuál. Aquí es donde "Container-diff" viene en ayuda.

¿Qué es Container-diff?

Container-diff es una herramienta de código abierto de Google que te ayuda a analizar y comparar imágenes de contenedores alojadas en la plataforma en la nube de Google .

Container-diff, se usa para rastrear fácilmente qué cambios se han realizado entre las dos imágenes base, para que pueda comprender mejor qué ha cambiado realmente dentro de las imágenes.

Esto le ahorrará mucho tiempo para encontrar la incompatibilidad de la versión del paquete, y puede decidir si reconstruir la aplicación en la última imagen del contenedor o simplemente quedarse con la versión anterior hasta que encuentre una solución adecuada.

También le ayuda a examinar fácilmente si su aplicación funcionará o no en las nuevas compilaciones de una imagen de contenedor.

Container-diff analiza lo siguiente en imágenes de contenedores.

  • Historial de imágenes de Docker,
  • Sistema de archivos de imagen,
  • Tamaño de imagen,
  • Paquetes aptos,
  • Paquetes de rpm,
  • paquetes de pips,
  • paquetes npm.

Ahora, veamos cómo instalar Container-diff y cómo usarlo para comparar imágenes de contenedores.

Instalar Container-diff en Linux

Probé Container-diff en un sistema Ubuntu. Sin embargo, debería funcionar en Debian y otras variantes de Ubuntu y también en otras distribuciones de Linux.

Primero, asegúrese de haber instalado Docker. Si aún no lo ha instalado, consulte el siguiente enlace.

  • Cómo instalar Docker en Ubuntu

Una vez que Docker esté instalado, instale Container-diff en su sistema Linux usando los siguientes comandos:

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

O, si no desea utilizar sudo, ejecute:

$ 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 está en Arch Linux, puede instalar Container-diff usando el siguiente comando:

$ sudo pacman -S container-diff

Analizar imágenes de contenedores

Primero, analicemos una imagen de contenedor, por ejemplo Debian 9, que se almacena en Google Container Registry. .

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

Salida de muestra:

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

Como puede ver, Container-diff muestra el análisis APT sin --type bandera especificada.

La lista de analizadores disponibles son;

  • --type=historia [Historia]
  • --type=file [Sistema de archivos]
  • --type=pip [Pip]
  • --type=apto [Apto]
  • --type=nodo [Nodo]

Puede ejecutar varios analizadores a la vez como se muestra a continuación.

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

Compara imágenes de contenedores usando Container-diff

Para comparar dos imágenes de contenedores, use el siguiente comando:

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

Aquí, estoy comparando dos imágenes de contenedor, la última imagen de compilación de Debian 9 y una imagen de Debian 9 compilada el 10 de octubre de 2017.

Salida de muestra:

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

Como puede ver en el resultado, hay tres paquetes que se han actualizado en la última compilación.

Si no hay diferencias entre las dos imágenes, verá una salida similar a la siguiente.

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

Como ya dije, por defecto, sin --type marca especificada, container-diff ejecutará el análisis del paquete Apt.

Podemos ejecutar múltiples analizadores a la vez como se muestra a continuación.

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

Aquí, estoy ejecutando tres analizadores, a saber, historial , apto y nodo .

Salida de muestra:

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

También puede comparar la imagen almacenada localmente con la imagen remota como se muestra a continuación.

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

Para obtener más detalles, consulte los enlaces oficiales de Container-diff que figuran a continuación.


Linux
  1. Cómo comparar números y cadenas en Linux Shell Script

  2. Cómo grabar una imagen ISO en DVD y USB usando dd

  3. Cómo aligerar la carga en su registro de contenedores usando Quay.io

  4. Cómo administrar los registros de contenedores de Linux

  5. Cómo crear un contenedor LXC usando lxcbr0 y virbr0 en CentOS/RHEL

Cómo acercar y alejar videos usando FFmpeg

Cómo cambiar el tamaño de las imágenes usando Python

Cómo recortar y cambiar el tamaño de las imágenes en Linux usando Gwenview

Cómo usar el comando DD y cómo grabar ISO usándolo

Cómo insertar y extraer imágenes de Docker con el registro de contenedores de DigitalOcean

Cómo analizar el rendimiento básico del sistema usando:vmstat, sar, iostat y mpstat