Kaip tvarkyti konteinerius naudojant „Podman“ ir „Skopeo“ RHEL 8


Vienas iš iššūkių, su kuriais kūrėjai susidūrė praeityje, yra užtikrinti, kad programos patikimai veiktų įvairiose skaičiavimo aplinkose. Dažnai programos neveikė taip, kaip tikėtasi, arba įvykdavo klaidų ir visai nepavykdavo. Ir čia gimė konteinerių koncepcija.

Kas yra konteinerių vaizdai?

Sudėtinio rodinio vaizdai yra statiniai failai, kurie pristatomi su vykdomuoju kodu, kuris veikia izoliuotoje aplinkoje. Konteinerio vaizdas apima sistemos bibliotekas, priklausomybes ir kitus platformos nustatymus, kurių reikia programai, kad ji veiktų įvairiose aplinkose.

Red Hat Linux suteikia naudingų sudėtinių rodinių įrankių rinkinį, kurį galite panaudoti dirbdami tiesiogiai su „Linux“ sudėtiniais rodiniais, naudodami reikalingas docker komandas. Jie apima:

  • Podman – tai be demonų talpyklos variklis, skirtas OCI konteineriams paleisti ir tvarkyti šakniniu arba bešakniu režimu. Podman yra panašus į Docker ir turi tas pačias komandų parinktis, išskyrus tai, kad Docker yra demonas. Galite patraukti, paleisti ir tvarkyti sudėtinio rodinio vaizdus naudodami podman taip pat, kaip tai darytumėte naudodami Docker. Podman pateikiama su daugybe išplėstinių funkcijų, visiškai integruojama su sistemomis ir siūlo naudotojo vardų erdvės palaikymą, įskaitant sudėtinių rodinių paleidimą be šakninio vartotojo.
  • Skopeo: tai komandų eilutės įrankis, naudojamas sudėtinio rodinio vaizdams iš vieno registro į kitą kopijuoti. Galite naudoti Skopeo, norėdami nukopijuoti vaizdus į tam tikrą prieglobą ir iš jo, taip pat kopijuoti vaizdus į kitą sudėtinio rodinio registrą arba aplinką. Be vaizdų kopijavimo, galite jį naudoti norėdami patikrinti vaizdus iš įvairių registrų ir naudoti parašus vaizdams kurti ir tikrinti.
  • Buildah: tai komandų eilutės įrankių rinkinys, naudojamas konteinerio OCI vaizdams kurti ir tvarkyti naudojant Docker failus.

Šiame straipsnyje daugiausia dėmesio skirsime konteinerių tvarkymui naudojant podman ir Skopeo.

Konteinerio vaizdų paieška nuotoliniame registre

Naudodami komandą podman paieška galite ieškoti sudėtinio rodinio vaizdų pasirinktuose nuotoliniuose registruose. Numatytasis registrų sąrašas yra apibrėžtas registries.conf faile, esančiame /etc/containers/ kataloge.

Registrus apibrėžia 3 skyriai.

  • [registries.search] – šioje skiltyje nurodomi numatytieji registrai, kuriuose podman gali ieškoti sudėtinio rodinio vaizdų. Ji ieško prašomo vaizdo registry.access.redhat.com, registry.redhat.io ir docker.io registruose.

  • [registries.insecure] – šioje skiltyje nurodomi registrai, kuriuose nėra TLS šifravimo, t. y. nesaugūs registrai. Pagal numatytuosius nustatymus įrašai nenurodomi.

  • [registries.block] – blokuoja arba užkerta kelią prieigai prie nurodytų registrų iš jūsų vietinės sistemos. Pagal numatytuosius nustatymus įrašai nenurodomi.

Kaip įprastas (ne šakninis) vartotojas, vykdantis podman komandą, galite nustatyti savo registries.conf failą pagrindiniame kataloge ($HOME/.config /containers/registries.conf), kad nepaisytumėte visos sistemos nustatymų.

Taisyklės nurodant registrus

Nurodydami registrus, atminkite šiuos dalykus:

  • Kiekvienas registras turi būti su kabutėmis.
  • Registrus galima nurodyti naudojant pagrindinio kompiuterio pavadinimą arba IP adresą.
  • Jei nurodyti keli registrai, jie turi būti atskirti kableliais.
  • Jei registre naudojamas nestandartinis prievadas – arba 443 prievado TCP prievadas, skirtas saugiam ir 80 nesaugus, prievado numeris turi būti nurodytas kartu su registro pavadinimu, pvz., registras.example.com:5566.

Norėdami registre ieškoti konteinerio vaizdo naudodami sintaksę:

podman search registry/container_image

Pavyzdžiui, norėdami ieškoti Redis vaizdo registry.redhat.io registre, iškvieskite komandą:

podman search registry.redhat.io/redis

Norėdami ieškoti MariaDB sudėtinio rodinio vaizdo, paleiskite.

podman search registry.redhat.io/mariadb

Norėdami gauti išsamų sudėtinio rodinio vaizdo aprašymą, naudokite parinktį --no-trunc prieš konteinerio vaizdo pavadinimą iš gautų rezultatų. Pavyzdžiui, bandysime gauti išsamų MariaDB konteinerio vaizdo aprašymą, kaip parodyta:

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

Konteinerio vaizdų traukimas

Norint ištraukti arba nuskaityti sudėtinio rodinio vaizdus iš nuotolinio registro, pirmiausia reikia autentifikuoti prieš bet ką kitą. Pavyzdžiui, norėdami gauti MariaDB konteinerio vaizdą, pirmiausia prisijunkite prie Redhat registro:

podman login

Pateikite savo vartotojo vardą ir slaptažodį ir klaviatūroje paspauskite ENTER. Jei viskas gerai, turėtumėte gauti patvirtinimo pranešimą, kad prisijungimas prie registro buvo sėkmingas.

Login Succeeded!

Dabar galite ištraukti vaizdą naudodami parodytą sintaksę:

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

<registry> nurodo nuotolinį pagrindinį kompiuterį arba registrą, kuris teikia konteinerio vaizdų saugyklą TCP <port>. <namespace> ir <name> kartu nurodo konteinerio vaizdą pagal <namespace> registre. Galiausiai parinktis <tag> nurodo konteinerio vaizdo versiją. Jei nenurodyta, naudojama numatytoji žyma – naujausia.

Visada rekomenduojama pridėti patikimus registrus, ty tuos, kurie užtikrina šifravimą ir neleidžia anoniminiams vartotojams sukurti paskyrų atsitiktiniais pavadinimais.

Norėdami ištraukti MariaDB vaizdą, paleiskite komandą:

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

Norint vėliau ištraukti sudėtinio rodinio vaizdus, daugiau prisijungti nereikia, nes jau esate autentifikuotas. Norėdami ištraukti Redis sudėtinio rodinio vaizdą, tiesiog paleiskite:

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

Sudėtinių vaizdų sąrašas

Baigę traukti vaizdus, galite peržiūrėti šiuo metu jūsų pagrindiniame kompiuteryje esančius vaizdus, vykdydami komandą podman images.

podman images

Konteinerių vaizdų tikrinimas

Prieš paleidžiant konteinerį, visada naudinga ištirti vaizdą ir suprasti, ką jis daro. Komanda Podman inspect išspausdina daugybę metaduomenų apie sudėtinį rodinį, pvz., OS ir architektūrą.

Norėdami patikrinti vaizdą, paleiskite komandą podman inspect ir vaizdo ID arba saugyklą.

podman inspect IMAGE ID
OR
podman inspect REPOSITORY

Toliau pateiktame pavyzdyje tikriname MariaDB konteinerį.

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

Norėdami gauti konkrečius sudėtinio rodinio metaduomenis, įveskite --format parinktį, po kurios metaduomenis ir sudėtinio rodinio tapatybę (vaizdo ID arba pavadinimą).

Toliau pateiktame pavyzdyje gauname informaciją apie RHEL 8 pagrindinio sudėtinio rodinio, kuris patenka į skiltį Etiketės, architektūrą ir aprašą.

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

Norėdami patikrinti nuotolinį vaizdą iš kito registro, naudokite komandą skopeo inspect. Toliau pateiktame pavyzdyje tikriname RHEL 8 pradinį vaizdą, priglobtą Docker.

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

Sudėtinio rodinio vaizdų žymėjimas

Kaip jau galėjote pastebėti, vaizdų pavadinimai paprastai yra bendrinio pobūdžio. Pavyzdžiui, redis vaizdas pažymėtas:

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

Pažymėjus vaizdus, jie gauna intuityvesnį pavadinimą, kad būtų galima geriau suprasti, kas juose yra. Naudodami komandą podman žyma galite sukurti vaizdo žymą, kuri iš esmės yra vaizdo pavadinimo, kurį sudaro skirtingos dalys, slapyvardis.

Šitie yra:

registry/username/NAME:tag

Pavyzdžiui, norėdami pakeisti bendrąjį Redis vaizdo, kurio ID yra 646f2730318c, pavadinimą, vykdysime komandą:

podman tag 646f2730318c myredis

Jei norite pridėti žymą pabaigoje, pridėkite visą dvitaškį ir žymos numerį:

podman tag 646f2730318c myredis:5.0

Nepridėjus žymos numerio, atributas jam bus priskirtas vėliau.

Veikia konteinerio vaizdai

Norėdami paleisti sudėtinį rodinį, naudokite komandą podman run. Pavyzdžiui:

podman run image_id

Norėdami tyliai paleisti konteinerį fone kaip demono paslaugą, naudokite parinktį -d, kaip parodyta.

podman run -d image_id

Pavyzdžiui, norėdami paleisti redis vaizdą su ID 646f2730318c, iškviesime komandą:

podman run -d 646f2730318c

Jei naudojate sudėtinį rodinį, pagrįstą operacine sistema, pvz., RHEL 8 baziniu vaizdu, galite pasiekti apvalkalą naudodami direktyvą -it. Parinktis -i sukuria interaktyvų seansą, o -t – terminalo seansą. Parinktis --name nustato sudėtinio rodinio pavadinimą į mybash, o pagrindinio vaizdo ecbc6f53bba0 vaizdo ID.

podman run -it --name=mybash ecbc6f53bba0

Po to galite paleisti bet kokias apvalkalo komandas. Toliau pateiktame pavyzdyje tikriname sudėtinio rodinio vaizdo OS versiją.

cat /etc/os-release

Norėdami išeiti iš konteinerio, tiesiog iškvieskite išėjimo komandą.

exit

Išėmus konteinerį, jis automatiškai sustoja. Norėdami vėl paleisti sudėtinį rodinį, naudokite komandą podman start su vėliava -ai, kaip parodyta.

podman start -ai mybash

Dar kartą tai suteikia prieigą prie apvalkalo.

Veikiančių sudėtinių rodinių vaizdų sąrašas

Norėdami pateikti šiuo metu veikiančių sudėtinių rodinių sąrašą, naudokite komandą podman ps, kaip parodyta.

podman ps

Norėdami peržiūrėti visus konteinerius, įskaitant tuos, kurie buvo išjungti po paleidimo, naudokite komandą:

podman ps -a

Sukonfigūruokite konteinerių vaizdus, kad jie būtų automatiškai paleisti naudojant „Systemd Service“.

Šiame skyriuje mes sutelkiame dėmesį į tai, kaip konteinerį galima sukonfigūruoti, kad jis veiktų tiesiogiai RHEL sistemoje kaip sisteminė paslauga.

Pirma, gaukite pageidaujamą vaizdą. Šiuo atveju iš doko centro ištraukėme Redis vaizdą:

podman pull docker.io/redis

Jei jūsų sistemoje veikia SELinux, turite suaktyvinti loginę reikšmę container_manage_cgroup, kad paleistumėte konteinerius su systemd.

setsebool -p container_manage_cgroup on

Tada paleiskite konteinerio vaizdą fone ir priskirkite jį norimam vaizdo pavadinimui. Šiame pavyzdyje savo vaizdą pavadinome redis_server ir susiejome prievadą 6379 iš konteinerio su mūsų RHEL 8 priegloba.

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

Tada kataloge /etc/systemd/system/ sukursime systemd vieneto konfigūracijos failą, skirtą pakartotinai.

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

Įklijuokite toliau pateiktą turinį į failą.

[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

Išsaugokite ir išeikite iš failo.

Tada sukonfigūruokite konteinerį, kad jis būtų automatiškai paleistas paleidžiant.

systemctl enable redis-container.service

Tada paleiskite konteinerį ir patikrinkite jo veikimo būseną.

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

Sukonfigūruokite nuolatinę talpyklos vaizdų saugyklą

Kai paleidžiate konteinerius, protinga sukonfigūruoti nuolatinę išorinę saugyklą pagrindiniame kompiuteryje. Tai suteikia atsarginę kopiją, jei konteineris sudužtų arba būtų netyčia pašalintas.

Norėdami išsaugoti duomenis, mes susiesime pagrindiniame kompiuteryje esantį katalogą su katalogu konteinerio viduje.

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

Parinktis --privileged perduodama, kai SELinux nustatyta kaip priverstinė. Parinktis -v nurodo išorinį tomą, esantį pagrindiniame kompiuteryje. Sudėtinio rodinio tūris yra /mnt katalogas.

Pasiekę apvalkalą, kataloge /mnt sukursime pavyzdinį failą testing.txt, kaip parodyta.

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

Tada išeisime iš sudėtinio rodinio ir patikrinsime, ar failas yra išorinėje prieglobos saugykloje

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

IšvestisTikrinama nuolatinė išorinė saugykla.

Talpyklų stabdymas ir išėmimas

Baigę paleisti sudėtinį rodinį, galite jį sustabdyti naudodami komandą podman stop ir container-id, kurią galite gauti iš podman ps<. komandą.

podman stop container-id

Norėdami pašalinti nebereikalingus sudėtinius rodinius, pirmiausia įsitikinkite, kad jį sustabdėte, tada iškvieskite komandą podman rm, po kurios kaip parinktį nurodykite sudėtinio rodinio ID arba pavadinimą.

podman rm container-id

Norėdami vienu metu pašalinti kelis sudėtinius rodinius viena komanda, nurodykite sudėtinio rodinio ID, atskirtą tarpu.

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

Norėdami išvalyti visus konteinerius, paleiskite komandą:

podman rm -a

Vaizdo pašalinimas

Norėdami pašalinti vaizdą, pirmiausia įsitikinkite, kad visi iš vaizdų sukurti konteineriai yra sustabdyti ir pašalinti, kaip aptarta ankstesnėje potemėje.

Tada tęskite ir paleiskite komandą podman -rmi ir vaizdo ID, kaip parodyta:

podman -rmi image-id

Išvada

Tai užbaigia šį skyrių apie konteinerių tvarkymą ir darbą su RHEL 8. Tikimės, kad šis vadovas padėjo tinkamai suprasti konteinerius ir tai, kaip galite sąveikauti ir valdyti juos RHEL sistemoje naudodami podman ir Skopeo.