Kako upravljati kontejnerje z uporabo Podmana in Skopea v RHEL 8
Eden od izzivov, s katerimi so se v preteklosti soočali razvijalci, je zagotoviti zanesljivo delovanje aplikacij v več računalniških okoljih. Pogosto se aplikacije niso izvajale po pričakovanjih ali so naletele na napake in so v celoti propadle. In tu se je rodil koncept zabojnikov.
Kaj so slike posode?
Slike vsebnika so statične datoteke, ki se pošiljajo z izvršljivo kodo, ki deluje v izoliranem okolju. Slika vsebnika vsebuje sistemske knjižnice, odvisnosti in druge nastavitve platforme, ki jih aplikacija potrebuje za izvajanje v različnih okoljih.
Red Hat Linux ponuja nabor uporabnih orodij za vsebnike, ki jih lahko izkoristite za neposredno delo s kontejnerji Linux z uporabo ukazov docker. Tej vključujejo:
- Podman - to je mehanizem za vsebnike brez demona za zagon in upravljanje vsebnikov OCI v korenskem ali brez korenskega načina. Podman je podoben Dockerju in ima enake možnosti ukaza, le da je Docker demon. S podmanom lahko vlečete, poganjate in upravljate slike posod na podoben način kot z Dockerjem. Podman ima veliko naprednih funkcij, popolnoma se integrira s sistemi in ponuja podporo za imenski prostor uporabnika, ki vključuje zagon vsebnikov brez potrebe po korenskem uporabniku.
- Skopeo: To je orodje ukazne vrstice, ki se uporablja za kopiranje slik vsebnikov iz enega registra v drugega. Skopeo lahko uporabite za kopiranje slik na določen gostitelj in z njega ter kopiranje slik v drug register vsebnika ali okolje. Poleg kopiranja slik ga lahko uporabljate za pregledovanje slik iz različnih registrov in s podpisi za ustvarjanje in preverjanje slik.
- Buildah: To je nabor orodij ukazne vrstice, ki se uporabljajo za ustvarjanje in upravljanje slik OCI vsebnika z uporabo datotek Docker.
V tem članku se bomo osredotočili na Upravljanje vsebnikov s pomočjo podman in Skopeo.
Iskanje posnetkov posod iz oddaljenega registra
Ukaz za iskanje podman vam omogoča iskanje posnetkov posod v izbranih oddaljenih registrih. Privzeti seznam registrov je določen v datoteki registries.conf, ki se nahaja v imeniku/etc/container /.
Registri so opredeljeni v treh oddelkih.
- [registries.search] - Ta razdelek določa privzete registre, ki jih lahko podman išče v slikah vsebnika. Zahtevano sliko išče v registrih register.access.redhat.com, registry.redhat.io in docker.io.
- [registries.insecure] - Ta razdelek določa registre, ki ne izvajajo šifriranja TLS, tj. negotove registre. Privzeto niso navedeni nobeni vnosi.
- [registries.block] - s tem blokira ali zavrne dostop do določenih registrov iz vašega lokalnega sistema. Privzeto niso navedeni nobeni vnosi.
Kot običajen (nekorenski) uporabnik, ki izvaja ukaz podman, lahko v domačem imeniku ($HOME/.config/container/registries.conf) določite svojo datoteko registries.conf, da preglasite sistemske nastavitve.
Ko določite registre, upoštevajte naslednje:
- Vsak register mora biti priložen z enojnimi narekovaji.
- Registre lahko določite z imenom gostitelja ali naslovom IP.
- Če je določenih več registrov, jih je treba ločiti z vejicami.
- Če register uporablja nestandardna vrata - bodisi vrata TCP 443 za varna in 80 za negotova, - je treba poleg imena registra navesti številko vrat, npr. register.example.com:5566.
Če želite v registru poiskati sliko vsebnika z uporabo sintakse:
# podman search registry/container_image
Če želite na primer poiskati sliko Redis v registru registry.redhat.io, pokličite ukaz:
# podman search registry.redhat.io/redis
Za iskanje slike posode MariaDB zaženite.
# podman search registry.redhat.io/mariadb
Če želite dobiti podroben opis slike vsebnika, uporabite možnost --no-trunc
pred imenom slike vsebnika iz rezultatov, ki jih dobite. Na primer, poskusili bomo dobiti podroben opis slike posode MariaDB, kot je prikazano:
# podman search --no-trunc registry.redhat.io/rhel8/mariadb-103
Vlečenje posod
Če vlečete ali pridobivate slike vsebnikov iz oddaljenega registra, morate najprej preveriti pristnost pred vsem drugim. Če želite na primer pridobiti sliko posode MariaDB, se najprej prijavite v register Redhat:
# podman login
Navedite svoje uporabniško ime in geslo ter na tipkovnici pritisnite tipko »ENTER«. Če je vse v redu, dobite potrditveno sporočilo, da je bila prijava v register uspešna.
Login Succeeded!
Zdaj lahko sliko povlečete s prikazano sintakso:
# podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
<registry>
se nanaša na oddaljenega gostitelja ali register, ki ponuja repozitorij slik vsebnikov na TCP <port>
. <namespace>
in <name>
skupaj določita sliko vsebnika na podlagi <namespace>
v registru. Na koncu možnost <tag>
določa različico slike vsebnika. Če nobena ni podana, se uporabi privzeta oznaka - najnovejša.
Vedno je priporočljivo dodati zaupanja vredne registre, torej tiste, ki zagotavljajo šifriranje in anonimnim uporabnikom ne dovolijo, da bi ustvarili račune z naključnimi imeni.
Če želite povleči sliko MariaDB, zaženite ukaz:
# podman pull registry.redhat.io/rhel8/mariadb-103
-
<registry>
- registry.redhat.io -
<namespace>
- rhel8 -
<name>
- MariaDB -
<tag>
- 103
Za nadaljnje vlečenje slik vsebnika ni potrebna nadaljnja prijava, ker ste že potrjeni. Če želite povleči sliko vsebnika Redis, preprosto zaženite:
# podman pull registry.redhat.io/rhscl/redis-5-rhel7
Slike vsebnikov s seznamom
Ko vlečete slike, si lahko ogledate slike, ki trenutno obstajajo na vašem gostitelju, tako da zaženete ukaz podman images.
# podman images
Pregled posnetkov posod
Pred zagonom posode je vedno dobro preizkusiti sliko in razumeti, kaj počne. Ukaz podman inspect natisne morje metapodatkov o vsebniku, kot sta OS in Arhitektura.
Če želite pregledati sliko, zaženite ukaz podman inspect, ki mu sledi ID slike ali repozitorij.
# podman inspect IMAGE ID OR # podman inspect REPOSITORY
V spodnjem primeru pregledujemo vsebnik MariaDB.
# podman inspect registry.redhat.io/rhel8/mariadb-103
Če želite povleči določene metapodatke za vsebnik, podajte možnost --format
, ki ji sledijo metapodatki in identiteta vsebnika (ID slike ali ime).
V spodnjem primeru pridobimo informacije o arhitekturi in opisu osnovnega vsebnika RHEL 8, ki spada v razdelek »Oznake«.
# podman inspect --format=’{{.Labels.architecture}}’ image ID # podman inspect --format=’{{.Labels.description}}’ image ID
Če želite pregledati oddaljeno sliko iz drugega registra, uporabite ukaz skopeo inspect. V spodnjem primeru pregledujemo sliko inicializacije RHEL 8, ki gostuje v Dockerju.
# skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init
Označevanje slik posode
Kot ste morda že opazili, so imena slik običajno generične narave. Slika redis je na primer označena z:
registry.redhat.io/rhscl/redis-5-rhel7
Označevanje slik jim daje bolj intuitivno ime, da bolje razumejo, kaj vsebujejo. Z ukazom podman tag lahko ustvarite slikovno oznako, ki je v bistvu vzdevek imena slike, ki vsebuje različne dele.
To so:
registry/username/NAME:tag
Če želimo na primer spremeniti generično ime slike Redis, ki ima ID 646f2730318c, bomo izvedli ukaz:
# podman tag 646f2730318c myredis
Če želite na koncu dodati oznako, dodajte polno dvopičje, ki mu sledi številka oznake:
# podman tag 646f2730318c myredis:5.0
Brez dodajanja številke oznake ji bo atribut dodeljen najnovejši.
Izvajanje slik vsebnika
Če želite zagnati vsebnik, uporabite ukaz podman run. Na primer:
# podman run image_id
Če želite zabojnik tiho zagnati v ozadju kot storitev demona, uporabite možnost -d
, kot je prikazano.
# podman run -d image_id
Na primer, da zaženemo sliko redis z ID 646f2730318c, bomo poklicali ukaz:
# podman run -d 646f2730318c
Če uporabljate vsebnik, ki temelji na operacijskem sistemu, kot je osnovna slika RHEL 8, lahko dostop do lupine dobite z direktivo -it
. Možnost -i
ustvari interaktivno sejo, medtem ko -t
ustvari terminalsko sejo. Možnost --name
nastavi ime vsebnika na mybash, medtem ko je ID slike ecbc6f53bba0 osnovne slike.
# podman run -it --name=mybash ecbc6f53bba0
Nato lahko izvajate poljubne ukaze lupine. V spodnjem primeru preverjamo različico OS slike vsebnika.
# cat /etc/os-release
Za izhod iz vsebnika preprosto pokličite ukaz za izhod.
# exit
Ko je vsebnik zaprt, se samodejno ustavi. Če želite vsebnik znova zagnati, uporabite ukaz podman start z oznako -ai
, kot je prikazano.
# podman start -ai mybash
Še enkrat, to vam omogoča dostop do lupine.
Seznam tekočih slik vsebnika
Če želite seznam trenutno izvajanih vsebnikov, uporabite ukaz podman ps, kot je prikazano.
# podman ps
Če si želite ogledati vse vsebnike, vključno s tistimi, ki so po zagonu izstopili, uporabite ukaz:
# podman ps -a
Konfigurirajte slike vsebnikov za samodejni zagon pod Systemd Service
V tem poglavju se osredotočamo na to, kako je mogoče vsebnik konfigurirati tako, da deluje neposredno v sistemu RHEL kot sistemska storitev.
Najprej dobite želeno sliko. V tem primeru smo povlekli sliko Redis iz zvezdišča:
# podman pull docker.io/redis
Če v vašem sistemu deluje SELinux, morate za zagon vsebnikov s sistemom aktivirati logično vrednost container_manage_cgroup.
# setsebool -p container_manage_cgroup on
Nato zaženite sliko vsebnika v ozadju in jo dodelite želenemu imenu slike. V tem primeru smo svojo sliko poimenovali redis_server in preslikali vrata 6379 iz vsebnika v naš gostitelj RHEL 8
# podman run -d --name redis_server -p 6379:6379 redis
Nato bomo v imeniku/etc/systemd/system/ustvarili konfiguracijsko datoteko sistemske enote za redis.
# vim /etc/systemd/system/redis-container.service
Spodnjo vsebino prilepite v datoteko.
[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
Shranite in zapustite datoteko.
Nato nastavite vsebnik tako, da se samodejno zažene ob zagonu.
# systemctl enable redis-container.service
Nato zaženite vsebnik in preverite njegovo stanje delovanja.
# systemctl start redis-container.service # systemctl status redis-container.service
Konfigurirajte trajni pomnilnik za slike vsebnika
Pri zagonu vsebnikov je smiselno na gostitelju konfigurirati trajni zunanji pomnilnik. To zagotavlja varnostno kopijo v primeru, da se posoda sesuje ali nenamerno odstrani.
Če želite ohraniti podatke, bomo preslikali imenik, ki se nahaja v gostitelju, v imenik znotraj vsebnika.
$ podman run --privileged -it -v /var/lib/containers/backup_storage:/mnt registry.redhat.io/ubi8/ubi /bin/bash
Možnost --privileged
se posreduje, ko je SELinux nastavljen na uveljavljanje. Možnost -v
določa zunanji nosilec, ki se nahaja na gostitelju. Volumen vsebnika tukaj je imenik/mnt.
Ko bomo dostopali do lupine, bomo v imeniku/mnt ustvarili vzorčno datoteko testing.txt, kot je prikazano.
$ echo "This tests persistent external storage" > /mnt/testing.txt
Nato bomo zapustili vsebnik in preverili, ali datoteka obstaja v zunanjem pomnilniku, ki se nahaja na gostitelju
# exit # cat /var/lib/containers/backup_storage/testing.txt
Izhod ⇒ Preizkusi trajni zunanji pomnilnik.
Ustavljanje in odstranjevanje zabojnikov
Ko končate z zagonom vsebnika, ga lahko ustavite z ukazom podman stop, ki mu sledi ID vsebnika, ki ga dobite iz ukaza podman ps.
# podman stop container-id
Če želite odstraniti vsebnike, ki jih ne potrebujete več, najprej poskrbite, da ga ustavite, nato pa kot možnost pokličete ukaz podman rm, ki mu sledi ID ali ime vsebnika.
# podman rm container-id
Če želite v enem ukazu odstraniti več vsebnikov naenkrat, podajte ID-je vsebnikov, ločene s presledkom.
# podman rm container-id-1 container-id-2 container-id-3
Če želite počistiti vse vsebnike, zaženite ukaz:
# podman rm -a
Odstranjevanje slike
Če želite odstraniti sliko, najprej zagotovite, da se vsi vsebniki, ustvarjeni s slik, ustavijo in odstranijo, kot je bilo opisano v prejšnji podtemi.
Nato nadaljujte in zaženite ukaz podman -rmi
, ki mu sledi ID slike, kot je prikazano:
# podman -rmi image-id
Zaključek
S tem je zaključeno to poglavje o upravljanju in delu s kontejnerji v RHEL 8. Upamo, da je ta priročnik zagotovil dostojno razumevanje kontejnerjev in tega, kako lahko v svojem sistemu RHEL uporabljate podman in Skopeo.