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
Izlaz ⇒ Ovo 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.