GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Menganalisis Dan Membandingkan Gambar Kontainer Menggunakan Container-diff

Dalam tutorial ini, kita akan mempelajari apa itu Container-diff, cara menginstal Container-diff di berbagai distribusi Linux, dan terakhir bagaimana menganalisis dan membandingkan image container menggunakan Container-diff.

Pengantar

Saya punya kabar baik bagi mereka yang sedang membangun aplikasi di container.

Bayangkan skenario ini. Anda seorang pengembang perangkat lunak. Anda sedang mengerjakan sebuah aplikasi, pada gambar container run time yang dikelola oleh orang lain.

Di tengah pengembangan, pembuat asli image container merilis versi baru image dasar tersebut dengan paket sistem yang diperbarui.

Anda mengunduh gambar dasar yang diperbarui dan melanjutkan membangun kembali aplikasi Anda di atasnya. Tiba-tiba, aplikasi Anda berhenti bekerja.

Anda telah berhasil membuatnya berfungsi di gambar sebelumnya, tetapi aplikasi Anda tidak berfungsi di gambar dasar terbaru.

Anda juga cukup yakin bahwa aplikasi bekerja dengan baik pada versi paket sistem sebelumnya di gambar dasar, tetapi Anda tidak tahu yang mana. Di sinilah "Container-diff" datang membantu.

Apa itu Container-diff?

Container-diff adalah alat sumber terbuka dari Google yang membantu Anda menganalisis dan membandingkan gambar penampung yang dihosting di platform awan Google .

Container-diff, digunakan untuk melacak dengan mudah perubahan apa yang telah dibuat antara dua gambar dasar, sehingga Anda bisa mendapatkan pemahaman yang lebih baik tentang apa yang sebenarnya berubah di dalam gambar.

Ini akan menghemat banyak waktu Anda untuk menemukan ketidakcocokan versi paket, dan Anda dapat memutuskan apakah akan membangun kembali aplikasi pada image container terbaru atau tetap menggunakan versi lama sampai Anda menemukan solusi yang sesuai.

Ini juga membantu Anda memeriksa dengan mudah apakah aplikasi Anda akan berfungsi atau tidak pada build baru dari image container.

Container-diff menganalisis hal berikut dalam gambar Container.

  • Riwayat Gambar Docker,
  • Sistem file gambar,
  • Ukuran gambar,
  • Paket yang tepat,
  • Paket Rpm,
  • paket pip,
  • paket npm.

Sekarang, mari kita lihat cara menginstal Container-diff dan cara menggunakannya untuk membandingkan gambar container.

Instal Container-diff di Linux

Saya menguji Container-diff pada sistem Ubuntu. Namun, itu harus bekerja pada Debian dan varian Ubuntu lainnya dan juga distribusi Linux lainnya.

Pertama, pastikan Anda telah menginstal Docker. Jika Anda belum menginstalnya, lihat tautan berikut.

  • Cara Menginstal Docker di Ubuntu

Setelah Docker diinstal, instal Container-diff di sistem Linux Anda menggunakan perintah berikut:

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

Atau, jika Anda tidak ingin menggunakan sudo, jalankan:

$ 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

Jika Anda menggunakan Arch Linux, Anda dapat menginstal Container-diff menggunakan perintah berikut:

$ sudo pacman -S container-diff

Menganalisis Gambar Penampung

Pertama, mari kita analisis image container, misalnya Debian 9, yang disimpan di Google Container Registry .

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

Contoh keluaran:

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

Seperti yang Anda lihat, Container-diff menampilkan analisis APT tanpa --type bendera ditentukan.

Daftar penganalisa yang tersedia adalah;

  • --type=history [Riwayat]
  • --type=file [Sistem File]
  • --type=pip [Pip]
  • --type=apt [Apt]
  • --type=node [Simpul]

Anda dapat menjalankan beberapa penganalisis sekaligus seperti di bawah ini.

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

Bandingkan gambar Container menggunakan Container-diff

Untuk membandingkan dua gambar Container, gunakan perintah berikut:

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

Di sini, saya membandingkan dua image container, image build Debian 9 terbaru dan image Debian 9 yang dibuat pada tanggal 18, 10 2017.

Contoh keluaran:

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

Seperti yang Anda lihat di output, ada tiga paket yang telah diperbarui di versi terbaru.

Jika tidak ada perbedaan antara kedua gambar, Anda akan melihat output seperti di bawah ini.

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

Seperti yang sudah saya katakan, secara default, tanpa --type ditentukan, container-diff akan menjalankan analisis paket Apt.

Kami dapat menjalankan beberapa penganalisis sekaligus seperti yang ditunjukkan di bawah ini.

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

Di sini, saya menjalankan tiga penganalisis yaitu sejarah , sesuai , dan simpul .

Contoh keluaran:

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

Anda juga dapat membandingkan gambar yang disimpan secara lokal dengan gambar jarak jauh seperti yang ditunjukkan di bawah ini.

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

Untuk detail lebih lanjut, lihat tautan resmi Container-diff yang diberikan di bawah ini.


Linux
  1. Bagaimana Membandingkan Angka dan String di Linux Shell Script

  2. Raspberry Pi Firewall:Cara Menginstal dan Mengelolanya dengan Menggunakan UFW

  3. Cara Membakar Gambar ISO Ke DVD Dan USB Menggunakan dd

  1. Cara meringankan beban pada registri kontainer Anda menggunakan Quay.io

  2. Bagaimana mengelola pendaftar penampung Linux

  3. Cara membuat wadah LXC menggunakan lxcbr0 dan virbr0 di CentOS/RHEL

  1. Cara Mengumpulkan Metrik Sistem dan Aplikasi menggunakan Metricbeat

  2. Bagaimana membandingkan dan menggabungkan file teks di Linux

  3. Cara membandingkan dan menggabungkan file teks di Linux (bagian 2)