V tomto tutoriálu se naučíme, co je Container-diff, jak nainstalovat Container-diff v různých distribucích Linuxu a nakonec, jak analyzovat a porovnávat obrazy kontejnerů pomocí Container-diff.
Úvod
Mám dobrou zprávu pro ty, kteří staví aplikace na kontejnerech.
Představte si tento scénář. Jste vývojář softwaru. Pracujete na aplikaci, na obrazu kontejneru za běhu, který spravuje někdo jiný.
Uprostřed vývoje vydá původní tvůrce obrazu kontejneru novou verzi tohoto základního obrazu s aktualizovanými systémovými balíčky.
Stáhnete si aktualizovaný základní obraz a budete na něm pokračovat v přestavbě aplikace. Najednou vaše aplikace přestala fungovat.
Úspěšně jste ji zprovoznili v předchozím obrazu, ale vaše aplikace nefungovala v nejnovějším základním obrazu.
Jste si také docela jisti, že aplikace fungovala dobře na předchozí verzi systémových balíčků v základním obrazu, ale netušíte, který z nich. Zde je "Container-diff" přichází na pomoc.
Co je to kontejnerový rozdíl?
Container-diff je open source nástroj od Google který vám pomůže analyzovat a porovnávat obrázky kontejnerů hostované na cloudové platformě Google .
Container-diff se používá ke snadnému sledování změn provedených mezi dvěma základními obrázky, takže můžete lépe porozumět tomu, co se uvnitř obrázků skutečně změnilo.
To vám ušetří spoustu času hledáním nekompatibility verze balíčku a můžete se rozhodnout, zda aplikaci přestavět na nejnovější image kontejneru, nebo jen zůstat u staré verze, dokud nenajdete vhodné řešení.
Pomůže vám také snadno prozkoumat, zda vaše aplikace bude či nebude fungovat na nových sestavách obrazu kontejneru.
Container-diff analyzuje následující v Container images.
- Historie obrázků Docker,
- Systém souborů obrázků,
- Velikost obrázku,
- Balíčky Apt,
- Balíčky RPM,
- pip balíčky,
- Balíčky npm.
Nyní se podívejme, jak nainstalovat Container-diff a jak jej použít k porovnání obrázků kontejnerů.
Instalace Container-diff v Linuxu
Testoval jsem Container-diff na systému Ubuntu. Měl by však fungovat na Debianu a dalších variantách Ubuntu a také na dalších distribucích Linuxu.
Nejprve se ujistěte, že jste nainstalovali Docker. Pokud jste jej ještě nenainstalovali, přejděte na následující odkaz.
- Jak nainstalovat Docker v Ubuntu
Jakmile je Docker nainstalován, nainstalujte Container-diff do systému Linux pomocí následujících příkazů:
$ curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64
$ sudo install container-diff-linux-amd64 /usr/local/bin/container-diff
Nebo, pokud nechcete používat sudo, spusťte:
$ 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
Pokud používáte Arch Linux, můžete Container-diff nainstalovat pomocí následujícího příkazu:
$ sudo pacman -S container-diff
Analýza obrázků kontejnerů
Nejprve analyzujme obrázek kontejneru, například Debian 9, který je uložen v Google Container Registry .
$ analyzovat kontejner-diff gcr.io/google-appengine/debian9:latest
Ukázkový výstup:
Načítání obrázku gcr.io/google-appengine/debian9:latest ze zdroje Cloud RegistryNačítání analýz-----Apt-----Balíčky nalezené v gcr.io/google-appengine/debian9:latest:NAME VELIKOST VERZE -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.238.2Ka1ific163-1 -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-diffutil31M.1:31.531M. M-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-81gpg. 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 1kg-M54bat 183pM-libatr 1:2.4.47-2 b2 42K-libaudit-běžný 1:2.6.7-2 30K-libaudit1 1:2.6.7-2 150K-libblkid1 2.29.2-1 367K-libbz2-1.0 1.10.6-8. 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-28113.6.6. M-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 2011601modul 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-libselpcre3 2:26639-33 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 fsl31b-9.4M libstdc++6 6.3.0-18 2M-libsystemd0 232-25 deb9u1 652K-libtinfo5 6.0 20161126-1+deb9u1 478K-libudev1 232-25 deb9u1 2421K-05081.2421K-05081 -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.291u-16.0curs -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-1K.9utils 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-zlib51g 1:1.2.8.>Jak můžete vidět, Container-diff zobrazuje analýzu APT bez
--type
zadán příznak.Seznam dostupných analyzátorů je;
- --type=history [Historie]
- --type=file [Systém souborů]
- --type=pip [Pip]
- --type=apt [Apt]
- --type=node [Uzel]
Můžete spustit více analyzátorů najednou, jak je uvedeno níže.
analýza $ container-diff gcr.io/google-appengine/debian9:latest --type=history --type=apt --type=file
Porovnejte obrázky kontejneru pomocí Container-diff
Chcete-li porovnat dva obrazy kontejnerů, použijte následující příkaz:
$ rozdíl kontejner-diff gcr.io/google-appengine/debian9:latest gcr.io/google-appengine/debian9:2017-10-18-191738
Zde porovnávám dva obrazy kontejneru, nejnovější obraz sestavení Debianu 9 a obraz Debianu 9 vytvořený 18. 10. 2017.
Ukázkový výstup:
Počáteční rozdíl u obrázků gcr.io/google-appengine/debian9:latest a gcr.io/google-appengine/debian9:2017-10-18-191738, použití se liší:[apt]Načítání obrázku gcr.io/google -appengine/debian9:2017-10-18-191738 ze zdroje Cloud RegistryNačítání obrázku gcr.io/google-appengine/debian9:nejnovější ze zdroje Cloud RegistryComputing diffs-----Apt-----Balíčky nalezené pouze v gcr. io/google-appengine/debian9:latest:ŽádnéBalíčky nalezené pouze v gcr.io/google-appengine/debian9:2017-10-18-191738:ŽádnéVerze:OBRÁZEK 1 (gcr.io/google-appengine/debian9:latest) IMAGE2 (gcr.io/google-appengine/debian9:2017-10-18-191738)-libssl 1.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,9 mil. 2017b-1, 2,9 mil.
Jak můžete vidět ve výstupu, v nejnovějším sestavení byly aktualizovány tři balíčky.
Pokud mezi těmito dvěma obrázky nejsou žádné rozdíly, uvidíte výstup podobný níže.
Výpočetní rozdíly-----Apt-----Balíčky nalezené pouze v gcr.io/google-appengine/debian9:latest:Žádné Balíčky nalezené pouze na gcr.io/google-appengine/debian9:2017-11-27-220229:Žádné Rozdíly mezi verzemi:Žádné
Jak jsem již řekl, ve výchozím nastavení bez --type
zadán příznak, kontejner-diff spustí analýzu balíčků Apt.
Můžeme spustit více analyzátorů najednou, jak je ukázáno níže.
$ rozdíl kontejner-diff gcr.io/google-appengine/debian9:latest gcr.io/google-appengine/debian9:2017-10-18-191738 --type=history --type=apt --type=uzel
Zde spouštím tři analyzátory, jmenovitě historii , apt a uzel .
Ukázkový výstup:
Počáteční rozdíl u obrázků gcr.io/google-appengine/debian9:latest a gcr.io/google-appengine/debian9:2017-10-18-191738, použití se liší:[history apt node]Načítání obrázku gcr.io /google-appengine/debian9:2017-10-18-191738 ze zdroje Cloud RegistryNačítání obrázku gcr.io/google-appengine/debian9:nejnovější ze zdroje Cloud RegistryComputing rozdíly-----Apt-----Balíčky nalezené pouze v gcr.io/google-appengine/debian9:latest:ŽádnéBalíčky nalezené pouze v gcr.io/google-appengine/debian9:2017-10-18-191738:Žádné Rozdíly mezi verzemi:OBRÁZEK PACKAGE1 (gcr.io/google-appengine/debian9:nejnovější) 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-----Historie-----Řádky historie dockeru nalezené pouze na gcr.io/google- appengine/debian9:latest:Řádky historie NoneDocker nalezené pouze v gcr.io/google-appengine/debian9:2017-10-18-191738:Žádné-----Node-----Balíčky nalezené pouze v gcr.i o/google-appengine/debian9:latest:ŽádnéBalíčky nalezené pouze v gcr.io/google-appengine/debian9:2017-10-18-191738:Žádné Rozdíly mezi verzemi:Žádné
Můžete také porovnat lokálně uložený obraz se vzdáleným obrazem, jak je znázorněno níže.
$ container-diff diff daemon://modified_debian:latest remote://gcr.io/google-appengine/debian9:latest
Další podrobnosti naleznete v oficiálních odkazech na rozdíl mezi kontejnery uvedenými níže.