Kako upravljati spremnicima pomoću Podmana i Skopea u RHEL 8


Jedan od izazova s kojima su se programeri suočavali u prošlosti je postizanje pouzdanog rada aplikacija u više računalnih okruženja. Često se aplikacije nisu pokretale prema očekivanjima ili su naišle na pogreške i uopće nisu uspjele. I tu se rodio koncept kontejnera.

Što su slike kontejnera?

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

Red Hat Linux nudi niz korisnih alata za spremnike koje možete iskoristiti za izravni rad s Linux spremnicima pomoću zahtijevajući naredbe dockera. To uključuje:

  • Podman - ovo je demon spremnik bez pokreta za pokretanje i upravljanje OCI spremnicima u root ili bez korijenskog načina. Podman je sličan Dockeru i ima iste naredbene mogućnosti, osim što je Docker demon. Pomoću podmana možete povući, pokrenuti i upravljati slikama spremnika na sličan način kao što biste to učinili s Dockerom. Podman dolazi s puno naprednih značajki, u potpunosti se integrira sa sustavima i nudi korisničku podršku za prostor imena koja uključuje pokretanje spremnika bez potrebe za root korisnikom.
  • Skopeo: Ovo je alat naredbenog retka koji se koristi za kopiranje slika spremnika iz jednog registra u drugi. Skopeo možete koristiti za kopiranje slika na i s određenog hosta, kao i kopiranje slika u drugi registar spremnika ili okruženje. Osim za kopiranje slika, možete ga koristiti za pregled slika iz različitih registara i pomoću potpisa za stvaranje i provjeru slika.
  • Izgradnja: Ovo je skup alata naredbenog retka koji se koriste za stvaranje i upravljanje OCI slikama spremnika pomoću Docker datoteka.

U ovom ćemo se članku usredotočiti na Upravljanje spremnicima pomoću podmana i Skopea.

Pretraživanje slika spremnika iz udaljenog registra

Naredba pretraživanja podman omogućuje vam pretraživanje slika spremnika u odabranim udaljenim registrima. Zadani popis registara definiran je u datoteci registries.conf koja se nalazi u direktoriju/etc/container /.

Registri su definirani u 3 odjeljka.

  • [registries.search] - Ovaj odjeljak navodi zadane registre koje podman može pretraživati slike spremnika. 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. Prema zadanim postavkama nisu navedeni unosi.

  • [registries.block] - Ovim se blokira ili zabranjuje pristup navedenim registrima iz vašeg lokalnog sustava. Prema zadanim postavkama nisu navedeni unosi.

Kao redoviti (nekorijenski) korisnik koji izvodi naredbu podman, možete definirati vlastitu datoteku registries.conf na svom početnom direktoriju ($HOME/.config/container/registries.conf) kako biste nadjačali postavke na cijelom sustavu.

Dok određujete registre, imajte na umu sljedeće:

  • Svaki registar trebao bi biti zatvoren pojedinačnim navodnicima.
  • Registri se mogu odrediti pomoću imena hosta ili IP adrese.
  • Ako je navedeno više registra, oni bi trebali biti odvojeni zarezima.
  • Ako registar koristi nestandardni port - bilo TCP priključke porta 443 za sigurne, a 80 za nesigurne, - broj porta treba navesti uz naziv registra, npr. registry.example.com:5566.

Da biste u registru pretražili sliku spremnika koristeći sintaksu:

# podman search registry/container_image

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

# podman search registry.redhat.io/redis

Za traženje slike slikovnice MariaDB pokrenite.

# podman search registry.redhat.io/mariadb

Da biste dobili detaljni opis slike spremnika, upotrijebite opciju --no-trunc prije imena slike spremnika iz rezultata koji dobijete. Na primjer, pokušat ćemo dobiti detaljan opis slike spremnika MariaDB kako je prikazano:

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

Povlačenje slika kontejnera

Povlačenje ili preuzimanje slika spremnika iz udaljenog registra zahtijeva prvo provjeru autentičnosti prije bilo čega drugog. Na primjer, da biste dohvatili sliku spremnika MariaDB, prvo se prijavite u registar Redhat:

# podman login

Navedite svoje korisničko ime i lozinku i pritisnite tipku "ENTER" na tipkovnici. Ako sve bude u redu, trebali biste dobiti poruku s potvrdom da je prijava u registar bila uspješna.

Login Succeeded!

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

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

<registry> odnosi se na udaljeni host ili registar koji pruža spremište slika spremnika na TCP <port>. <namespace> i <name> kolektivno određuju sliku spremnika na temelju <namespace> u registru. Napokon, opcija <tag> navodi verziju slike spremnika. Ako nije navedena nijedna, koristi se zadana oznaka - najnovija.

Uvijek se preporučuje dodavanje pouzdanih registara, to jest onih koji pružaju šifriranje i ne dopuštaju anonimnim korisnicima da rađaju račune s nasumičnim imenima.

Da biste izvukli sliku MariaDB, pokrenite naredbu:

# podman pull registry.redhat.io/rhel8/mariadb-103

  • <registry> - registry.redhat.io
  • <namespace> - rhel8
  • <name> - MariaDB
  • Oznaka <tag> - 103

Za slijedeće povlačenje slika spremnika nije potrebno daljnje prijavljivanje jer ste već provjerili autentičnost. Da biste povukli sliku spremnika Redis, jednostavno pokrenite:

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

Popis slika spremnika

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

# podman images

Pregled slika kontejnera

Prije pokretanja spremnika, uvijek je dobro ispitati sliku i shvatiti što čini. Naredba podman inspect ispisuje more metapodataka o spremniku kao što su OS i Arhitektura.

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

# podman inspect IMAGE ID
OR
# podman inspect REPOSITORY

U primjeru u nastavku pregledavamo spremnik MariaDB.

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

Da biste izvukli određene metapodatke za spremnik, dodajte opciju --format nakon čega slijede metapodaci i identitet spremnika (ID slike ili ime).

U donjem primjeru dohvaćamo informacije o arhitekturi i opisu osnovnog spremnika 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, upotrijebite naredbu skopeo inspect. U donjem primjeru pregledavamo početnu sliku RHEL 8 hostiranu na Dockeru.

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

Označavanje slika spremnika

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

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

Označavanje slika daje im intuitivniji naziv da bi bolje razumjeli što sadrže. Pomoću naredbe podman tag možete stvoriti slikovnu oznaku koja je u osnovi alias imenu slike koji sadrži različite dijelove.

Ovi su:

registry/username/NAME:tag

Na primjer, za promjenu generičkog imena slike Redis koja ima ID 646f2730318c, izvršit ćemo naredbu:

# podman tag 646f2730318c myredis

Da biste dodali oznaku na kraju, dodajte puno dvotočje praćeno brojem oznake:

# podman tag 646f2730318c myredis:5.0

Bez dodavanja broja oznake, upravo će mu biti dodijeljen najnoviji atribut.

Pokretanje slika spremnika

Da biste pokrenuli spremnik, upotrijebite naredbu podman run. Na primjer:

# podman run image_id

Za tiho pokretanje spremnika u pozadini kao uslugu demona koristite opciju -d kao što je prikazano.

# podman run -d image_id

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

# podman run -d 646f2730318c

Ako izvodite spremnik zasnovan na operacijskom sustavu kao što je osnovna slika RHEL 8, pristup ljusci možete dobiti pomoću direktive -it . Opcija -i stvara interaktivnu sesiju, dok -t stvara terminalsku sesiju. Opcija --name postavlja ime spremnika na mybash, dok je ID slike ecbc6f53bba0 osnovne slike.

# podman run -it --name=mybash ecbc6f53bba0

Nakon toga možete pokretati bilo koje naredbe ljuske. U donjem primjeru provjeravamo verziju OS slike spremnika.

# cat /etc/os-release

Da biste izašli iz spremnika, jednostavno pozovite naredbu exit.

# exit

Nakon što izađete iz spremnika, automatski se zaustavlja. Da biste ponovno pokrenuli spremnik, upotrijebite naredbu podman start s oznakom -ai kao što je prikazano.

# podman start -ai mybash

Još jednom, ovo vam daje pristup ljusci.

Popis pokrenutih slika kontejnera

Da biste popisali spremnike koji se trenutno izvode, upotrijebite naredbu podman ps kako je prikazano.

# podman ps

Za prikaz svih spremnika, uključujući one koji su izašli nakon pokretanja, upotrijebite naredbu:

# podman ps -a

Konfigurirajte slike spremnika za automatsko pokretanje pod uslugom Systemd

U ovom ćemo se dijelu usredotočiti na to kako se spremnik može konfigurirati da se izravno pokreće na RHEL sustavu kao sistemska usluga.

Prvo nabavite željenu sliku. U ovom smo slučaju povukli sliku Redisa iz čvorišta dockera:

# podman pull docker.io/redis

Ako je na vašem sustavu pokrenut SELinux, morate aktivirati boolean bocean container_manage_cgroup za pokretanje spremnika sa systemd.

# setsebool -p container_manage_cgroup on

Nakon toga pokrenite sliku spremnika u pozadini i dodijelite je željenom imenu slike. U ovom smo primjeru nazvali našu sliku redis_server i mapirali port 6379 iz spremnika na naš domaćin RHEL 8

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

Dalje, stvorit ćemo datoteku konfiguracije systemd jedinice za redis u direktoriju/etc/systemd/system /.

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

Zalijepite donji sadržaj 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

Spremite i zatvorite datoteku.

Zatim konfigurirajte spremnik tako da se automatski pokreće prilikom pokretanja.

# systemctl enable redis-container.service

Zatim pokrenite spremnik i provjerite je li pokrenut.

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

Konfigurirajte trajnu pohranu za slike spremnika

Prilikom pokretanja spremnika, pametno je konfigurirati trajnu vanjsku pohranu na hostu. To osigurava sigurnosnu kopiju u slučaju da se spremnik sruši ili slučajno ukloni.

Da bismo nastavili s podacima, mapirat ćemo direktorij smješten u hostu u direktorij unutar spremnika.

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

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

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

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

Zatim ćemo izaći iz spremnika 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 postojanu vanjsku pohranu.

Zaustavljanje i uklanjanje spremnika

Nakon što završite s pokretanjem spremnika, možete ga zaustaviti pomoću naredbe podman stop nakon koje slijedi id spremnika koji možete dobiti iz naredbe podman ps.

# podman stop container-id

Da biste uklonili spremnike koji vam više nisu potrebni, najprije ga zaustavite, a zatim pozovite naredbu podman rm nakon čega slijedi ID ili ime spremnika kao opcija.

# podman rm container-id

Da biste u jednoj naredbi uklonili više spremnika u pokretu, navedite ID-ove spremnika odvojene razmakom.

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

Da biste očistili sve spremnike, pokrenite naredbu:

# podman rm -a

Uklanjanje slike

Da biste uklonili sliku, prvo osigurajte da su svi spremnici koji su nastali sa slika zaustavljeni i uklonjeni kako je bilo objašnjeno u prethodnoj podtemi.

Dalje, nastavite i pokrenite naredbu podman -rmi nakon čega slijedi ID slike kao što je prikazano:

# podman -rmi image-id

Zaključak

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