GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So analysieren und vergleichen Sie Container-Images mit Container-Diff

In diesem Tutorial lernen wir, was Container-diff ist, wie Container-diff in verschiedenen Linux-Distributionen installiert wird und schließlich, wie Container-Images mit Container-diff analysiert und verglichen werden.

Einführung

Ich habe eine gute Nachricht für diejenigen, die Anwendungen auf Containern erstellen.

Stellen Sie sich dieses Szenario vor. Sie sind Softwareentwickler. Sie arbeiten an einer Anwendung, an einem Laufzeit-Container-Image, das von jemand anderem verwaltet wird.

Mitten in der Entwicklung veröffentlicht der ursprüngliche Ersteller des Container-Images eine neue Version dieses Basis-Images mit aktualisierten Systempaketen.

Sie laden das aktualisierte Basisimage herunter und bauen Ihre Anwendung darauf weiter neu auf. Plötzlich funktionierte Ihre Anwendung nicht mehr.

Sie haben es im vorherigen Image erfolgreich zum Laufen gebracht, aber Ihre Anwendung hat im neuesten Basisimage nicht funktioniert.

Sie sind sich auch ziemlich sicher, dass die Anwendung auf der vorherigen Version der Systempakete im Basisimage gut funktioniert hat, aber Sie haben keine Ahnung, welche. Hier ist "Container-Diff" kommt Hilfe.

Was ist Container-Diff?

Container-diff ist ein Open-Source-Tool von Google das Ihnen hilft, Container-Images zu analysieren und zu vergleichen, die auf der Google Cloud-Plattform gehostet werden .

Container-Diff wird verwendet, um auf einfache Weise nachzuverfolgen, welche Änderungen zwischen den beiden Basis-Images vorgenommen wurden, sodass Sie besser verstehen können, was sich wirklich in den Images geändert hat.

Dadurch sparen Sie viel Zeit, um die Inkompatibilität der Paketversion zu finden, und Sie können entscheiden, ob Sie die Anwendung auf dem neuesten Container-Image neu erstellen oder einfach bei der alten Version bleiben, bis Sie eine geeignete Problemumgehung gefunden haben.

Es hilft Ihnen auch, einfach zu prüfen, ob Ihre Anwendung auf den neuen Builds eines Container-Images funktioniert oder nicht.

Container-diff analysiert Folgendes in Container-Images.

  • Verlauf von Docker-Images
  • Image-Dateisystem,
  • Bildgröße,
  • Apt-Pakete,
  • RPM-Pakete,
  • PIP-Pakete,
  • npm-Pakete.

Sehen wir uns nun an, wie Container-diff installiert und zum Vergleichen von Container-Images verwendet wird.

Container-diff unter Linux installieren

Ich habe Container-diff auf einem Ubuntu-System getestet. Es sollte jedoch auf Debian und anderen Ubuntu-Varianten und auch anderen Linux-Distributionen funktionieren.

Stellen Sie zunächst sicher, dass Sie Docker installiert haben. Wenn Sie es noch nicht installiert haben, verwenden Sie den folgenden Link.

  • So installieren Sie Docker in Ubuntu

Sobald Docker installiert ist, installieren Sie Container-diff auf Ihrem Linux-System mit den folgenden Befehlen:

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

Oder, wenn Sie sudo nicht verwenden möchten, führen Sie Folgendes aus:

$ 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

Wenn Sie Arch Linux verwenden, können Sie Container-diff mit dem folgenden Befehl installieren:

$ sudo pacman -S container-diff

Container-Images analysieren

Lassen Sie uns zunächst ein Container-Image analysieren, beispielsweise Debian 9, das in Google Container Registry gespeichert ist .

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

Beispielausgabe:

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

Wie Sie sehen, zeigt Container-diff die APT-Analyse ohne --type an Flag angegeben.

Die Liste der verfügbaren Analysatoren ist:

  • --type=history [Verlauf]
  • --type=file [Dateisystem]
  • --type=pip [Pip]
  • --type=apt [Apt]
  • --type=node [Knoten]

Sie können mehrere Analysatoren gleichzeitig wie unten ausführen.

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

Container-Images mit Container-Diff vergleichen

Um zwei Container-Images zu vergleichen, verwenden Sie den folgenden Befehl:

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

Hier vergleiche ich zwei Container-Images, das neueste Debian 9-Build-Image und ein Debian 9-Image, das am 18.10.2017 erstellt wurde.

Beispielausgabe:

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

Wie Sie in der Ausgabe sehen können, wurden im neuesten Build drei Pakete aktualisiert.

Wenn es keine Unterschiede zwischen den beiden Bildern gibt, sehen Sie eine Ausgabe wie unten.

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

Wie ich schon sagte, standardmäßig ohne --type Flag angegeben, container-diff führt die Apt-Paketanalyse aus.

Wir können mehrere Analysatoren gleichzeitig ausführen, wie unten gezeigt.

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

Hier führe ich drei Analysatoren aus, nämlich Verlauf , passend und Knoten .

Beispielausgabe:

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

Sie können das lokal gespeicherte Image auch wie unten gezeigt mit dem entfernten Image vergleichen.

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

Weitere Einzelheiten finden Sie unter den unten angegebenen offiziellen Container-Diff-Links.


Linux
  1. So vergleichen Sie Zahlen und Zeichenfolgen im Linux-Shell-Skript

  2. Raspberry Pi Firewall:So installieren und verwalten Sie sie mit UFW

  3. So brennen Sie ein ISO-Image mit dd auf DVD und USB

  4. So verwalten Sie Linux-Containerregistrierungen

  5. So erstellen Sie einen LXC-Container mit lxcbr0 und virbr0 in CentOS/RHEL

So vergrößern und verkleinern Sie Videos mit FFmpeg

So ändern Sie die Größe von Bildern mit Python

So schneiden und skalieren Sie Bilder unter Linux mit Gwenview

Wie man den DD-Befehl verwendet und wie man ISO damit brennt

So pushen und ziehen Sie Docker-Images mit der Container Registry von DigitalOcean

So analysieren Sie die grundlegende Systemleistung mit – vmstat, sar, iostat und mpstat