GNU/Linux >> Linux Esercitazione >  >> Linux

Come analizzare e confrontare le immagini del contenitore usando Container-diff

In questo tutorial impareremo cos'è Container-diff, come installare Container-diff in varie distribuzioni Linux e infine come analizzare e confrontare le immagini del container usando Container-diff.

Introduzione

Ho una buona notizia per coloro che stanno creando applicazioni su container.

Immagina questo scenario. Sei uno sviluppatore di software. Stai lavorando su un'applicazione, su un'immagine del contenitore di runtime gestita da qualcun altro.

Nel bel mezzo dello sviluppo, il creatore originale dell'immagine del contenitore rilascia una nuova versione dell'immagine di base con pacchetti di sistema aggiornati.

Scarica l'immagine di base aggiornata e continua a ricostruire l'applicazione su di essa. Improvvisamente, la tua applicazione ha smesso di funzionare.

L'hai fatto funzionare correttamente nell'immagine precedente, ma la tua applicazione non ha funzionato nell'ultima immagine di base.

Sei anche abbastanza sicuro che l'applicazione abbia funzionato bene sulla versione precedente dei pacchetti di sistema nell'immagine di base, ma non hai idea di quale. Qui è dove "Differenza contenitore" viene in aiuto.

Cos'è Container-diff?

Container-diff è uno strumento open source di Google che ti aiuta ad analizzare e confrontare le immagini dei container ospitate nella piattaforma cloud di Google .

Container-diff, viene utilizzato per tracciare facilmente quali modifiche sono state apportate tra le due immagini di base, in modo da poter comprendere meglio ciò che è realmente cambiato all'interno delle immagini.

Ciò ti farà risparmiare un sacco di tempo per trovare l'incompatibilità della versione del pacchetto e potrai decidere se ricostruire l'applicazione sull'ultima immagine del contenitore o semplicemente restare con la vecchia versione finché non trovi una soluzione adeguata.

Ti aiuta anche a esaminare facilmente se la tua applicazione funzionerà o meno sulle nuove build di un'immagine contenitore.

Container-diff analizza quanto segue nelle immagini del contenitore.

  • Cronologia immagini Docker,
  • Sistema di file immagine,
  • Dimensioni immagine,
  • Pacchetti adatti,
  • Pacchetti RPM,
  • pacchetti di pip,
  • pacchetti npm.

Ora, vediamo come installare Container-diff e come utilizzarlo per confrontare le immagini del contenitore.

Installa Container-diff in Linux

Ho testato Container-diff su un sistema Ubuntu. Tuttavia, dovrebbe funzionare su Debian e altre varianti di Ubuntu e anche su altre distribuzioni Linux.

Innanzitutto, assicurati di aver installato Docker. Se non l'hai già installato, fai riferimento al seguente link.

  • Come installare Docker in Ubuntu

Una volta installato Docker, installa Container-diff sul tuo sistema Linux utilizzando i seguenti comandi:

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

Oppure, se non vuoi usare sudo, esegui:

$ 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

Se sei su Arch Linux, puoi installare Container-diff usando il seguente comando:

$ sudo pacman -S container-diff

Analizza le immagini del contenitore

Innanzitutto, analizziamo un'immagine contenitore, ad esempio Debian 9, che è archiviata in Google Container Registry .

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

Risultato di esempio:

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

Come puoi vedere, Container-diff mostra l'analisi APT senza --type flag specificato.

L'elenco degli analizzatori disponibili è;

  • --type=history [Cronologia]
  • --type=file [File system]
  • --type=pip [Pip]
  • --type=apt [Apt]
  • --type=nodo [Nodo]

Puoi eseguire più analizzatori contemporaneamente come di seguito.

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

Confronta le immagini del contenitore utilizzando Container-diff

Per confrontare due immagini di Contenitori, usa il seguente comando:

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

Qui sto confrontando due immagini di container, l'ultima immagine di build di Debian 9 e un'immagine di Debian 9 creata il 18, 10, 2017.

Risultato di esempio:

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

Come puoi vedere nell'output, sono stati aggiornati tre pacchetti nell'ultima build.

Se non ci sono differenze tra le due immagini, vedrai un output simile a quello di seguito.

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

Come ho già detto, per impostazione predefinita, senza --type flag specificato, container-diff eseguirà l'analisi del pacchetto Apt.

Possiamo eseguire più analizzatori contemporaneamente come mostrato di seguito.

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

Qui sto eseguendo tre analizzatori, vale a dire storia , adeguato e nodo .

Risultato di esempio:

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

Puoi anche confrontare l'immagine memorizzata localmente con l'immagine remota come mostrato di seguito.

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

Per maggiori dettagli, fare riferimento ai link ufficiali Container-differenz forniti di seguito.


Linux
  1. Come confrontare numeri e stringhe nello script della shell di Linux

  2. Raspberry Pi Firewall:come installarlo e gestirlo utilizzando UFW

  3. Come masterizzare un'immagine ISO su DVD e USB utilizzando dd

  4. Come alleggerire il carico sul registro dei container utilizzando Quay.io

  5. Come gestire i registri dei container Linux

Come ingrandire e rimpicciolire i video utilizzando FFmpeg

Come ridimensionare le immagini usando Python

Come ritagliare e ridimensionare le immagini su Linux usando Gwenview

Come usare il comando DD e come masterizzare ISO usandolo

Come spingere e tirare le immagini Docker con il registro dei contenitori di DigitalOcean

Come analizzare le prestazioni di base del sistema utilizzando – vmstat, sar, iostat e mpstat