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.