Vyhledávání na webu

Jak spravovat kontejnery pomocí Podman a Skopeo v RHEL 8


Jednou z výzev, kterým vývojáři čelili v minulosti, je zajistit, aby aplikace spolehlivě běžely v různých výpočetních prostředích. Aplikace často neběžely podle očekávání nebo se vyskytly chyby a zcela selhaly. A tam se zrodil koncept kontejnerů.

Co jsou obrázky kontejnerů?

Obrazy kontejneru jsou statické soubory dodávané se spustitelným kódem, který běží v izolovaném prostředí. Obraz kontejneru obsahuje systémové knihovny, závislosti a další nastavení platformy, která aplikace potřebuje ke spuštění v různých prostředích.

Red Hat Linux poskytuje sadu užitečných nástrojů pro kontejnery, které můžete využít k přímé práci s kontejnery Linux pomocí požadovaných příkazů docker. Tyto zahrnují:

  • Podman – Toto je bezdémonový kontejnerový engine pro spouštění a správu OCI kontejnerů v režimu root nebo rootless. Podman je podobný Dockeru a má stejné možnosti příkazů kromě toho, že Docker je démon. Obrázky kontejnerů můžete stahovat, spouštět a spravovat pomocí podman v podstatě stejným způsobem jako s Docker. Podman přichází se spoustou pokročilých funkcí, plně se integruje se systémy a nabízí podporu uživatelského jmenného prostoru, která zahrnuje spouštění kontejnerů bez potřeby uživatele root.
  • Skopeo: Toto je nástroj příkazového řádku používaný ke kopírování obrázků kontejnerů z jednoho registru do druhého. Skopeo můžete použít ke kopírování obrázků do az určitého hostitele a také ke kopírování obrázků do jiného registru kontejnerů nebo prostředí. Kromě kopírování obrázků jej můžete použít ke kontrole obrázků z různých registrů a používat podpisy k vytváření a ověřování obrázků.
  • Buildah: Jedná se o sadu nástrojů příkazového řádku používaných k vytváření a správě obrázků kontejneru OCI pomocí souborů Docker.

V tomto článku se zaměříme na správu kontejnerů pomocí podman a Skopeo.

Vyhledávání obrázků kontejneru ze vzdáleného registru

Příkaz podman search umožňuje vyhledávat obrázky kontejnerů ve vybraných vzdálených registrech. Výchozí seznam registrů je definován v souboru registries.conf, který se nachází v adresáři /etc/containers/.

Registry jsou definovány 3 sekcemi.

  • [registries.search] – Tato část určuje výchozí registry, ve kterých může podman vyhledávat obrázky kontejnerů. Vyhledá požadovaný obrázek v registrech registry.access.redhat.com, registry.redhat.io a docker.io.

  • [registries.insecure]– Tato část uvádí registry, které neimplementují šifrování TLS, tj. nezabezpečené registry. Ve výchozím nastavení nejsou zadány žádné položky.

  • [registries.block] – Tato možnost zablokuje nebo odepře přístup k určeným registrům z vašeho místního systému. Ve výchozím nastavení nejsou zadány žádné položky.

Jako běžný (neroot) uživatel spouštějící příkaz podman můžete definovat svůj vlastní soubor registries.conf ve svém domovském adresáři ($HOME/.config /containers/registries.conf), chcete-li přepsat nastavení celého systému.

Pravidla při zadávání registrů

Při zadávání registrů mějte na paměti následující:

  • Každý registr by měl být uzavřen jednoduchými uvozovkami.
  • Registry lze zadat pomocí názvu hostitele nebo IP adresy.
  • Pokud je uvedeno více registrů, měly by být odděleny čárkami.
  • Pokud registr používá nestandardní port – buď port TCP porty 443 pro zabezpečený a 80 pro nezabezpečený, – číslo portu by mělo být uvedeno vedle názvu registru, např. registr.example.com:5566.

Chcete-li v registru vyhledat obrázek kontejneru pomocí syntaxe:

podman search registry/container_image

Chcete-li například vyhledat obrázek Redis v registru registry.redhat.io, vyvolejte příkaz:

podman search registry.redhat.io/redis

Chcete-li vyhledat obrázek kontejneru MariaDB, spusťte.

podman search registry.redhat.io/mariadb

Chcete-li získat podrobný popis obrázku kontejneru, použijte možnost --no-trunc před názvem obrázku kontejneru z výsledků, které získáte. Pokusíme se například získat podrobný popis obrázku kontejneru MariaDB, jak je znázorněno:

podman search --no-trunc registry.redhat.io/rhel8/mariadb-103

Vytahování obrázků kontejnerů

Stahování nebo načítání obrazů kontejneru ze vzdáleného registru vyžaduje, abyste se nejprve ověřili. Chcete-li například načíst obraz kontejneru MariaDB, nejprve se přihlaste do registru Redhat:

podman login

Zadejte své uživatelské jméno a heslo a stiskněte „ENTER“ na klávesnici. Pokud vše půjde dobře, měli byste obdržet potvrzovací zprávu, že přihlášení do registru bylo úspěšné.

Login Succeeded!

Nyní můžete obrázek stáhnout pomocí zobrazené syntaxe:

podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

<registry> odkazuje na vzdálený hostitel nebo registr, který poskytuje úložiště obrázků kontejneru na TCP <port>. <namespace> a <name> společně určují obrázek kontejneru na základě <namespace> v registru. Nakonec možnost <tag> určuje verzi obrázku kontejneru. Není-li zadána žádná, použije se výchozí značka – nejnovější.

Vždy se doporučuje přidávat důvěryhodné registry, tedy ty, které poskytují šifrování a neumožňují anonymním uživatelům vytvářet účty s náhodnými jmény.

Chcete-li stáhnout obraz MariaDB, spusťte příkaz:

podman pull registry.redhat.io/rhel8/mariadb-103
  • <registry> – registry.redhat.io
  • <namespace> – rhel8
  • <name> – MariaDB
  • <tag> – 103

Pro následné stahování obrázků kontejneru není vyžadováno žádné další přihlašování, protože jste již ověřeni. Chcete-li načíst obrázek kontejneru Redis, jednoduše spusťte:

podman pull registry.redhat.io/rhscl/redis-5-rhel7

Výpis obrázků kontejnerů

Jakmile dokončíte stahování obrázků, můžete si zobrazit obrázky aktuálně existující na vašem hostiteli spuštěním příkazu podman images.

podman images

Kontrola obrázků kontejnerů

Před spuštěním kontejneru je vždy dobré obrázek prozkoumat a pochopit, co dělá. Příkaz podman inspect vytiskne moře metadat o kontejneru, jako je OS a architektura.

Chcete-li obrázek zkontrolovat, spusťte příkaz podman inspect následovaný ID obrázku nebo úložištěm.

podman inspect IMAGE ID
OR
podman inspect REPOSITORY

V níže uvedeném příkladu kontrolujeme kontejner MariaDB.

podman inspect registry.redhat.io/rhel8/mariadb-103

Chcete-li získat konkrétní metadata pro kontejner, předejte možnost --format následovanou metadaty a identitou kontejneru (ID obrázku nebo název).

V níže uvedeném příkladu získáváme informace o architektuře a popisu základního kontejneru RHEL 8, který spadá do sekce „Štítky“.

podman inspect --format=’{{.Labels.architecture}}’ image ID
podman inspect --format=’{{.Labels.description}}’ image ID

Chcete-li zkontrolovat vzdálený obraz z jiného registru, použijte příkaz skopeo inspect. V níže uvedeném příkladu kontrolujeme inicializační obraz RHEL 8 hostovaný na Docker.

skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init

Označování obrázků kontejnerů

Jak jste si možná všimli, názvy obrázků jsou obvykle obecné povahy. Například obrázek redis je označen:

registry.redhat.io/rhscl/redis-5-rhel7

Označování obrázků jim dává intuitivnější název, aby lépe pochopili, co obsahují. Pomocí příkazu podman tag můžete vytvořit značku obrázku, která je v podstatě aliasem názvu obrázku, který se skládá z různých částí.

Tyto jsou:

registry/username/NAME:tag

Chcete-li například změnit obecný název obrázku Redis, který má ID 646f2730318c , provedeme příkaz:

podman tag 646f2730318c myredis

Chcete-li přidat značku na konec, připojte plnou dvojtečku následovanou číslem značky:

podman tag 646f2730318c myredis:5.0

Bez přidání čísla značky bude pouze přiřazen atribut nejnovější.

Spuštěné obrázky kontejnerů

Ke spuštění kontejneru použijte příkaz podman run. Například:

podman run image_id

Chcete-li kontejner spustit tiše na pozadí jako službu démona, použijte volbu -d, jak je znázorněno.

podman run -d image_id

Chcete-li například spustit obrázek redis s ID 646f2730318c, vyvoláme příkaz:

podman run -d 646f2730318c

Pokud používáte kontejner založený na operačním systému, jako je základní obraz RHEL 8, můžete získat přístup k shellu pomocí direktivy -it. Volba -i vytvoří interaktivní relaci, zatímco -t vytvoří terminálovou relaci. Možnost --name nastavuje název kontejneru na mybash, zatímco je ecbc6f53bba0 ID obrázku základního obrázku.

podman run -it --name=mybash ecbc6f53bba0

Poté můžete spustit libovolné příkazy shellu. V níže uvedeném příkladu ověřujeme verzi operačního systému obrázku kontejneru.

cat /etc/os-release

Chcete-li opustit kontejner, jednoduše vyvolejte příkaz exit.

exit

Jakmile kontejner opustíte, automaticky se zastaví. Chcete-li kontejner znovu spustit, použijte příkaz podman start s příznakem -ai, jak je znázorněno na obrázku.

podman start -ai mybash

Opět vám to umožní přístup k shellu.

Výpis obrázků běžících kontejnerů

Chcete-li zobrazit aktuálně spuštěné kontejnery, použijte příkaz podman ps, jak je uvedeno na obrázku.

podman ps

Chcete-li zobrazit všechny kontejnery včetně těch, které byly po spuštění ukončeny, použijte příkaz:

podman ps -a

Nakonfigurujte obrazy kontejnerů na automatické spouštění pod službou Systemd

V této části se zaměříme na to, jak lze nakonfigurovat kontejner tak, aby běžel přímo v systému RHEL jako služba systemd.

Nejprve si získejte preferovaný obrázek. V tomto případě jsme stáhli obrázek Redis z docker hubu:

podman pull docker.io/redis

Pokud máte na svém systému spuštěný SELinux, musíte aktivovat logickou hodnotu container_manage_cgroup pro spouštění kontejnerů s systemd.

setsebool -p container_manage_cgroup on

Poté spusťte obrázek kontejneru na pozadí a přiřaďte mu preferovaný název obrázku. V tomto příkladu jsme pojmenovali náš obrázek redis_server a namapovali port 6379 z kontejneru na našeho hostitele RHEL 8

podman run -d --name redis_server -p 6379:6379 redis

Dále vytvoříme konfigurační soubor jednotky systemd pro redis v adresáři /etc/systemd/system/.

vim /etc/systemd/system/redis-container.service

Vložte níže uvedený obsah do souboru.

[Unit]
Description=Redis container

[Service]
Restart=always
ExecStart=/usr/bin/podman start -a redis_server
ExecStop=/usr/bin/podman stop -t 2 redis_server

[Install]
WantedBy=local.target

Uložte a ukončete soubor.

Dále nakonfigurujte kontejner tak, aby se automaticky spouštěl při spuštění.

systemctl enable redis-container.service

Dále spusťte kontejner a ověřte jeho provozní stav.

systemctl start redis-container.service
systemctl status redis-container.service

Nakonfigurujte trvalé úložiště pro obrazy kontejnerů

Při spouštění kontejnerů je rozumné nakonfigurovat trvalé externí úložiště na hostiteli. To poskytuje zálohu pro případ, že by kontejner havaroval nebo byl náhodně odstraněn.

Aby byla data zachována, namapujeme adresář umístěný v hostiteli na adresář uvnitř kontejneru.

podman run --privileged -it -v /var/lib/containers/backup_storage:/mnt registry.redhat.io/ubi8/ubi /bin/bash

Možnost --privileged je předána, když je SELinux nastaven na vynucení. Volba -v určuje externí svazek, který je umístěn na hostiteli. Objem kontejneru je zde adresář /mnt.

Jakmile vstoupíme do shellu, vytvoříme ukázkový soubor testing.txt v adresáři /mnt, jak je znázorněno.

echo "This tests persistent external storage" > /mnt/testing.txt

Poté opustíme kontejner a zkontrolujeme, zda soubor existuje v externím úložišti umístěného na hostiteli

exit
cat /var/lib/containers/backup_storage/testing.txt

VýstupToto testuje trvalé externí úložiště.

Zastavení a odstranění kontejnerů

Jakmile skončíte se spuštěním kontejneru, můžete jej zastavit pomocí příkazu podman stop následovaného container-id, který můžete získat od podman ps< příkaz.

podman stop container-id

Chcete-li odebrat kontejnery, které již nepotřebujete, nejprve se ujistěte, že jste jej zastavili, a poté vyvolejte příkaz podman rm následovaný ID nebo názvem kontejneru jako možností.

podman rm container-id

Chcete-li odstranit více kontejnerů najednou v jednom příkazu, zadejte ID kontejneru oddělené mezerou.

podman rm container-id-1 container-id-2 container-id-3

Chcete-li vymazat všechny kontejnery, spusťte příkaz:

podman rm -a

Odebrání obrázku

Chcete-li odstranit obrázek, nejprve se ujistěte, že všechny kontejnery vytvořené z obrázků jsou zastaveny a odstraněny, jak je popsáno v předchozím dílčím tématu.

Dále pokračujte a spusťte příkaz podman -rmi následovaný ID obrázku, jak je znázorněno:

podman -rmi image-id

Závěr

Tím tato kapitola o správě a práci s kontejnery v RHEL 8 uzavírá. Doufáme, že tato příručka poskytla dostatečné pochopení kontejnerů a toho, jak s nimi můžete pracovat a spravovat je v systému RHEL pomocí podman a Skopeo.