Kako upravljati kontejnerima koristeći Podman i Skopeo u RHEL 8


Jedan od izazova s kojima su se programeri suočavali u prošlosti je natjerati aplikacije da pouzdano rade u više računarskih okruženja. Često, aplikacije nisu radile kako se očekivalo ili su nailazile na greške i potpuno neuspjele. I tu je rođen koncept kontejnera.

Šta su slike kontejnera?

Slike kontejnera su statične datoteke koje se isporučuju s izvršnim kodom koji se izvodi u izoliranom okruženju. Slika kontejnera sadrži sistemske biblioteke, zavisnosti i druge postavke platforme koje su potrebne aplikaciji za rad u različitim okruženjima.

Red Hat Linux pruža skup korisnih alata za kontejnere koje možete iskoristiti za direktan rad sa Linux kontejnerima koristeći potrebne docker komande. To uključuje:

  • Podman – Ovo je mehanizam kontejnera bez demona za pokretanje i upravljanje OCI kontejnerima u root ili bez root načina. Podman je sličan Dockeru i ima iste komandne opcije osim što je Docker demon. Možete povući, pokrenuti i upravljati slikama kontejnera koristeći podman na isti način kao što biste to učinili sa Dockerom. Podman dolazi sa puno naprednih funkcija, potpuno se integriše sa sistemima i nudi korisničku podršku za Namespace koja uključuje pokretanje kontejnera bez potrebe za root korisnikom.
  • Skopeo: Ovo je alat komandne linije koji se koristi za kopiranje slika kontejnera iz jednog registra u drugi. Možete koristiti Skopeo za kopiranje slika na i sa određenog hosta, kao i kopiranje slika u drugi registar kontejnera ili okruženje. Osim za kopiranje slika, možete ga koristiti za pregled slika iz različitih registara i korištenje potpisa za kreiranje i provjeru slika.
  • Buildah: Ovo je skup alata komandne linije koji se koriste za kreiranje i upravljanje OCI slikama kontejnera pomoću Docker datoteka.

U ovom članku ćemo se fokusirati na upravljanje kontejnerima koristeći podman i Skopeo.

Pretraživanje slika kontejnera iz udaljenog registra

Komanda podman search vam omogućava da pretražite odabrane udaljene registre za slike kontejnera. Zadana lista registara je definirana u datoteci registries.conf koja se nalazi u direktoriju /etc/containers/.

Registri su definisani sa 3 sekcije.

  • [registries.search] – Ovaj odjeljak specificira zadane registre koje podman može tražiti slike kontejnera. Traži traženu sliku u registrima registry.access.redhat.com, registry.redhat.io, i docker.io.

  • [registries.insecure]– Ovaj odjeljak navodi registre koji ne implementiraju TLS enkripciju, tj. nesigurne registre. Po defaultu, nisu navedeni unosi.

  • [registries.block] – Ovo blokira ili odbija pristup navedenim registrima iz vašeg lokalnog sistema. Po defaultu, nisu navedeni unosi.

Kao običan (ne-root) korisnik koji pokreće naredbu podman, možete definirati vlastitu datoteku registries.conf u svom početnom direktoriju ($HOME/.config /containers/registries.conf) da biste nadjačali postavke za cijeli sistem.

Pravila pri određivanju registara

Dok specificirate registre, imajte na umu sljedeće:

  • Svaki registar treba da bude ograđen jednostrukim navodnicima.
  • Registri se mogu specificirati pomoću imena hosta ili IP adrese.
  • Ako je navedeno više registara, onda ih treba odvojiti zarezima.
  • Ako registar koristi nestandardni port – bilo port TCP porta 443 za bezbedne i 80 za nesigurne, – broj porta treba navesti pored imena registra, npr. registry.example.com:5566.

Da biste pretražili registar za sliku kontejnera koristeći sintaksu:

podman search registry/container_image

Na primjer, da biste tražili Redis sliku u registru registry.redhat.io, pozovite naredbu:

podman search registry.redhat.io/redis

Za traženje slike kontejnera MariaDB pokrenite.

podman search registry.redhat.io/mariadb

Da biste dobili detaljan opis slike kontejnera, koristite opciju --no-trunc ispred imena slike kontejnera iz rezultata koje dobijete. Na primjer, pokušat ćemo dobiti detaljan opis MariaDB slike kontejnera kao što je prikazano:

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

Slike izvlačenja kontejnera

Povlačenje ili dohvaćanje slika kontejnera iz udaljenog registra zahtijeva da se prvo autentifikujete prije bilo čega drugog. Na primjer, da biste dohvatili MariaDB sliku kontejnera, prvo se prijavite u Redhat registar:

podman login

Unesite svoje korisničko ime i lozinku i pritisnite „ENTER“ na tastaturi. Ako sve prođe kako treba, trebali biste dobiti poruku potvrde da je prijava u registar uspješna.

Login Succeeded!

Sada možete povući sliku koristeći prikazanu sintaksu:

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

<registry> se odnosi na udaljeni host ili registar koji pruža spremište slika kontejnera na TCP <port>. <namespace> i <name> zajedno specificiraju sliku kontejnera na osnovu <namespace> u registru. Konačno, opcija <tag> specificira verziju slike kontejnera. Ako nijedna nije navedena, koristi se zadana oznaka – najnovija.

Uvijek se preporučuje dodavanje pouzdanih registara, odnosno onih koji pružaju enkripciju i ne dozvoljavaju anonimnim korisnicima da stvaraju račune s nasumičnim imenima.

Da povučete MariaDB sliku, pokrenite naredbu:

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

Za naknadno povlačenje slika kontejnera nije potrebna daljnja prijava jer ste već autentificirani. Da povučete Redis sliku kontejnera, jednostavno pokrenite:

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

Popis slika kontejnera

Kada završite sa povlačenjem slika, možete pogledati slike koje trenutno postoje na vašem hostu pokretanjem naredbe podman images.

podman images

Provjera slika kontejnera

Prije pokretanja kontejnera, uvijek je dobra ideja ispitati sliku i shvatiti šta ona radi. Komanda podman inspect ispisuje more metapodataka o kontejneru kao što su OS i arhitektura.

Da biste pregledali sliku, pokrenite naredbu podman inspect nakon čega slijedi ID slike ili spremište.

podman inspect IMAGE ID
OR
podman inspect REPOSITORY

U primjeru ispod provjeravamo MariaDB kontejner.

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

Da biste izvukli određene metapodatke za kontejner, prođite opciju --format nakon čega slijede metapodaci i identitet kontejnera (ID slike ili ime).

U donjem primjeru dohvaćamo informacije o arhitekturi i opisu osnovnog kontejnera RHEL 8 koji spada u odjeljak 'Oznake'.

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

Da biste pregledali udaljenu sliku iz drugog registra, koristite naredbu skopeo inspect. U primjeru ispod, provjeravamo RHEL 8 init image hostiran na Dockeru.

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

Označavanje slika kontejnera

Kao što ste mogli primijetiti, nazivi slika su obično generičke prirode. Na primjer, redis slika je označena:

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

Označavanje slika daje im intuitivnije ime kako bi bolje razumjeli šta sadrže. Koristeći naredbu podman tag, možete kreirati oznaku slike koja je u suštini pseudonim za naziv slike koji se sastoji od različitih dijelova.

Ovo su:

registry/username/NAME:tag

Na primjer, da promijenimo generički naziv Redis slike koja ima ID 646f2730318c , izvršit ćemo naredbu:

podman tag 646f2730318c myredis

Da dodate oznaku na kraju, dodajte punu dvotočku nakon čega slijedi broj oznake:

podman tag 646f2730318c myredis:5.0

Bez dodavanja broja oznake, samo će joj biti dodijeljen atribut zadnji.

Pokreću slike kontejnera

Za pokretanje kontejnera koristite naredbu podman run. Na primjer:

podman run image_id

Za tiho pokretanje kontejnera u pozadini kao demon servis koristite opciju -d kao što je prikazano.

podman run -d image_id

Na primjer, za pokretanje slike redis s ID-om 646f2730318c, pozvat ćemo naredbu:

podman run -d 646f2730318c

Ako koristite kontejner baziran na operativnom sistemu kao što je RHEL 8 osnovna slika, možete dobiti pristup ljusci pomoću -it direktive. Opcija -i kreira interaktivnu sesiju dok -t pokreće terminalsku sesiju. Opcija --name postavlja naziv kontejnera na mybash dok je ecbc6f53bba0 id slike osnovne slike.

podman run -it --name=mybash ecbc6f53bba0

Nakon toga, možete pokrenuti bilo koju shell komandu. U primjeru ispod, provjeravamo OS verziju slike kontejnera.

cat /etc/os-release

Da biste izašli iz kontejnera, jednostavno pozovite naredbu za izlaz.

exit

Kada se kontejner izađe, on se automatski zaustavlja. Da ponovo pokrenete kontejner, koristite naredbu podman start sa zastavicom -ai kao što je prikazano.

podman start -ai mybash

Još jednom, ovo vam daje pristup ljusci.

Popis slika pokrenutih kontejnera

Za popis trenutno pokrenutih kontejnera, koristite naredbu podman ps kao što je prikazano.

podman ps

Da vidite sve kontejnere uključujući i one koji su izašli nakon pokretanja, koristite naredbu:

podman ps -a

Konfigurišite slike kontejnera za automatsko pokretanje pod Systemd servisom

U ovom odeljku fokusiramo se na to kako se kontejner može konfigurisati da radi direktno na RHEL sistemu kao sistemska usluga.

Prvo uzmite željenu sliku. U ovom slučaju, izvukli smo Redis sliku iz docker čvorišta:

podman pull docker.io/redis

Ako imate pokrenut SELinux na vašem sistemu, morate aktivirati container_manage_cgroup boolean za pokretanje kontejnera sa systemd.

setsebool -p container_manage_cgroup on

Nakon toga pokrenite sliku kontejnera u pozadini i dodijelite je svom željenom nazivu slike. U ovom primjeru, nazvali smo našu sliku redis_server i mapirali port 6379 iz kontejnera na naš RHEL 8 host

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

Zatim ćemo kreirati systemd datoteku konfiguracije jedinice za redis u /etc/systemd/system/ direktoriju.

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

Zalijepite sadržaj ispod u datoteku.

[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

Sačuvajte i izađite iz datoteke.

Zatim konfigurirajte kontejner da se automatski pokreće pri pokretanju.

systemctl enable redis-container.service

Zatim pokrenite kontejner i provjerite njegov radni status.

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

Konfigurirajte trajnu pohranu za slike kontejnera

Prilikom pokretanja kontejnera, pametno je konfigurirati trajnu vanjsku pohranu na hostu. Ovo pruža rezervnu kopiju u slučaju da se kontejner sruši ili slučajno ukloni.

Da bismo sačuvali podatke, mapirati ćemo direktorij koji se nalazi u hostu u direktorij unutar kontejnera.

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

Opcija --privileged se prosljeđuje kada je SELinux postavljen na prinudno. Opcija -v specificira vanjski volumen koji se nalazi na hostu. Volumen spremnika ovdje je /mnt direktorij.

Nakon što pristupimo ljusci, kreirat ćemo uzorak datoteke testing.txt u direktoriju /mnt kao što je prikazano.

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

Zatim ćemo izići iz kontejnera i provjeriti postoji li datoteka u vanjskoj pohrani koja se nalazi na hostu

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

IzlazOvo testira trajnu eksternu pohranu.

Zaustavljanje i uklanjanje kontejnera

Kada završite s pokretanjem vašeg kontejnera, možete ga zaustaviti pomoću naredbe podman stop nakon čega slijedi container-id koji možete dobiti od podman ps< komanda.

podman stop container-id

Da biste uklonili kontejnere koji vam više nisu potrebni, prvo provjerite jeste li ga zaustavili, a zatim pozovite naredbu podman rm praćenu ID-om ili imenom kontejnera kao opciju.

podman rm container-id

Da biste uklonili više kontejnera odjednom u jednoj naredbi, navedite idove kontejnera odvojene razmakom.

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

Da obrišete sve svoje kontejnere, pokrenite naredbu:

podman rm -a

Uklanjanje slike

Da biste uklonili sliku, prvo se uvjerite da su svi kontejneri stvoreni iz slika zaustavljeni i uklonjeni kao što je raspravljano u prethodnoj podtemi.

Zatim nastavite i pokrenite naredbu podman -rmi praćenu ID-om slike kao što je prikazano:

podman -rmi image-id

Zaključak

Ovo završava ovo poglavlje o upravljanju i radu sa kontejnerima u RHEL 8. Nadamo se da je ovaj vodič pružio pristojno razumijevanje kontejnera i načina na koji možete komunicirati i upravljati njima na svom RHEL sistemu koristeći podman i Skopeo.