Kuidas hallata konteinereid Podmani ja Skopeo abil RHEL 8-s


Üks väljakutseid, millega arendajad minevikus silmitsi seisid, on panna rakendused usaldusväärselt töötama mitmes arvutikeskkonnas. Sageli ei töötanud rakendused ootuspäraselt või ilmnesid vead ja need ebaõnnestusid täielikult. Ja seal sündis konteinerite kontseptsioon.

Mis on konteineripildid?

Konteineripildid on staatilised failid, mis tarnitakse käivitatava koodiga, mis töötab eraldatud keskkonnas. Konteineripilt sisaldab süsteemiteeke, sõltuvusi ja muid platvormi sätteid, mida rakendus vajab erinevates keskkondades töötamiseks.

Red Hat Linux pakub hulga kasulikke konteineritööriistu, mida saate kasutada dokkeri käske kasutades otse Linuxi konteineritega töötamiseks. Need sisaldavad:

  • Podman - see on deemonivabam konteinerimootor OCI-konteinerite käitamiseks ja haldamiseks kas juur- või juurita režiimis. Podman sarnaneb Dockeriga ja tal on samad käsuvalikud, välja arvatud see, et Docker on deemon. Konteineripilte saab tõmmata, käivitada ja hallata Podmani abil umbes samamoodi nagu Dockeri puhul. Podmanil on palju täiustatud funktsioone, see integreerub täielikult süsteemidega ja pakub kasutajate nimeruumi tuge, mis sisaldab konteinerite käitamist ilma juurkasutajata.
  • Skopeo: see on käsurea tööriist, mida kasutatakse konteineripiltide kopeerimiseks ühest registrist teise. Skopeo abil saate kopeerida pilte kindlale hostile ja tagasi ning kopeerida pilte teise konteineri registrisse või keskkonda. Lisaks piltide kopeerimisele saate seda kasutada mitmesuguste registrite piltide kontrollimiseks ja allkirjade abil piltide loomiseks ja kontrollimiseks.
  • Buildah: see on käsurea tööriistade komplekt, mida kasutatakse konteiner-OCI-piltide loomiseks ja haldamiseks Dockeri failide abil.

Selles artiklis keskendume konteinerite haldamisele podmani ja Skopeo abil.

Konteineripiltide otsimine kaugregistrist

Podmani otsingukäsu abil saate konteineripilte otsida valitud kaugregistritest. Registrite vaikeloend on määratletud kataloogis/etc/container/asuvas registries.conf failis.

Registrid on määratletud 3 jaotisega.

  • [register.search] - see jaotis määrab vaikeregistrid, mida podman saab konteineripilte otsida. Ta otsib taotletud pilti registritest register.access.redhat.com, register.redhat.io ja docker.io.

  • [registrists.insecure] - see jaotis määrab registrid, mis ei rakenda TLS-i krüptimist, st ebaturvalised registrid. Vaikimisi pole ühtegi kirjet täpsustatud.

  • [registrists.block] - see blokeerib või keelab teie kohalikust süsteemist juurdepääsu määratud registritele. Vaikimisi pole ühtegi kirjet täpsustatud.

Tavalise (juurita) kasutajana, kes käitab podmani käsku, saate oma kodukataloogis ($HOME/.config/container/registries.conf) määratleda oma registries.conf-faili, et alistada kogu süsteemi hõlmavad seaded.

Registrite määramisel pidage meeles järgmist:

  • Iga register peaks olema ümbritsetud üksikute jutumärkidega.
  • Registreid saab määrata kas hostinime või IP-aadressi abil.
  • Kui on määratud mitu registrit, tuleks need eraldada komadega.
  • Kui register kasutab mittestandardset porti - kas pordi TCP-pordid 443 turvaliseks ja 80 ebaturvaliseks, - tuleks pordi number määrata lisaks registrinimele nt. register.example.com: 5566.

Süntaksi abil konteineripildi registrist otsimiseks toimige järgmiselt.

# podman search registry/container_image

Näiteks Redise pildi otsimiseks registrist register.redhat.io kutsuge käsk:

# podman search registry.redhat.io/redis

MariaDB konteineri pildijooksu otsimiseks.

# podman search registry.redhat.io/mariadb

Konteineripildi üksikasjaliku kirjelduse saamiseks kasutage saadud tulemuste hulgast valikut --no-trunc enne konteineripildi nime. Näiteks proovime saada MariaDB konteineri pildi üksikasjaliku kirjelduse, nagu näidatud:

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

Konteineripiltide tõmbamine

Konteineripiltide tõmbamine või toomine kaugregistrist nõuab esmalt autentimist enne kõike muud. Näiteks MariaDB konteineripildi hankimiseks logige kõigepealt sisse Redhati registrisse:

# podman login

Sisestage oma kasutajanimi ja parool ning vajutage klaviatuuril nuppu ENTER. Kui kõik läheb hästi, peaksite saama kinnitusteate, et registrisse sisselogimine õnnestus.

Login Succeeded!

Nüüd saate pildi tõmmata, kasutades näidatud süntaksit:

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

<registry> viitab kaughostile või registrile, mis pakub konteineripiltide hoidlat TCP-s <port>. <namespace> ja <name> määravad ühiselt konteineri pildi registris oleva <namespace> põhjal. Lõpuks määrab suvand <tag> konteineripildi versiooni. Kui ühtegi pole määratud, kasutatakse vaikemärgendit - viimane.

Alati on soovitatav lisada usaldusväärsed registrid, st need, mis pakuvad krüptimist ja ei võimalda anonüümsetel kasutajatel luua juhuslike nimedega kontosid.

MariaDB pildi tõmbamiseks käivitage käsk:

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

  • <registry> - register.redhat.io
  • <nimeruum> - rhel8
  • <name> - MariaDB
  • <tag> - 103

Järgnevate konteineripiltide tõmbamiseks pole vaja enam sisse logida, kuna olete juba autentitud. Redise konteineripildi tõmbamiseks käivitage lihtsalt:

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

Konteineripiltide kuvamine

Kui olete piltide tõmbamise lõpetanud, saate käsku Podman images käivitades vaadata hostis praegu olemasolevaid pilte.

# podman images

Konteineripiltide kontrollimine

Enne konteineri käitamist on alati hea pilt uurida ja mõista, mida see teeb. Podman inspect käsk prindib välja konteineri (näiteks OS ja arhitektuur) metaandmete mere.

Kujutise kontrollimiseks käivitage käsk Podman inspect, millele järgneb pildi ID või hoidla.

# podman inspect IMAGE ID
OR
# podman inspect REPOSITORY

Allpool toodud näites kontrollime MariaDB konteinerit.

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

Konteineri jaoks konkreetsete metaandmete hankimiseks sisestage valik --format , millele järgnevad metaandmed ja konteineri identiteet (pildi ID või nimi).

Allpool toodud näites leiame teavet jaotise „Sildid” alla kuuluva RHEL 8 baaskonteineri arhitektuuri ja kirjelduse kohta.

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

Teisest registrist kaugpildi kontrollimiseks kasutage käsku skopeo inspect. Allpool toodud näites kontrollime Dockeris hostitud RHEL 8 init pilti.

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

Konteineripiltide sildistamine

Nagu võisite märkida, on pildinimed tavaliselt oma olemuselt üldised. Näiteks on redis-pildil silt:

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

Piltide sildistamine annab neile intuitiivsema nime, et paremini mõista, mida need sisaldavad. Podmani sildi käsu abil saate luua pildimärgendi, mis on sisuliselt varjunimi erinevatest osadest koosneva pildi nimele.

Need on:

registry/username/NAME:tag

Näiteks Redise pildi üldnime muutmiseks, mille ID on 646f2730318c, täidame käsu:

# podman tag 646f2730318c myredis

Sildi lisamiseks lisage täielik koolon, millele järgneb sildi number:

# podman tag 646f2730318c myredis:5.0

Sildinumbrit lisamata määratakse sellele lihtsalt viimane atribuut.

Konteineripiltide käitamine

Konteineri käivitamiseks kasutage käsku Podman run. Näiteks:

# podman run image_id

Konteineri vaikseks käivitamiseks taustal deemonteenusena kasutage valikut -d , nagu näidatud.

# podman run -d image_id

Näiteks redis-pildi käivitamiseks ID-ga 646f2730318c kutsume käsu:

# podman run -d 646f2730318c

Kui käitate konteinerit, mis põhineb operatsioonisüsteemil, näiteks RHEL 8 baaspildil, saate kestale juurde pääseda, kasutades käsku -it . Valik -i loob interaktiivse seansi, samal ajal kui -t sünnitab terminaliseansi. Valik --name määrab konteineri nimeks mybash, samas kui see on baaspildi ecbc6f53bba0 pildi ID.

# podman run -it --name=mybash ecbc6f53bba0

Seejärel saate käivitada mis tahes shellikäske. Allpool toodud näites kontrollime konteineripildi OS-i versiooni.

# cat /etc/os-release

Konteinerist väljumiseks kutsuge lihtsalt käsk exit.

# exit

Kui konteiner on väljunud, peatub see automaatselt. Konteineri taaskäivitamiseks kasutage podmani käivitamise käsku lipuga -ai , nagu näidatud.

# podman start -ai mybash

Taas annab see teile juurdepääsu kestale.

Jooksvate konteineripiltide kuvamine

Praegu töötavate konteinerite loetlemiseks kasutage käsku podman ps, nagu näidatud.

# podman ps

Kõigi konteinerite, sealhulgas ka pärast käivitamist lahkunud konteinerite kuvamiseks kasutage käsku:

# podman ps -a

Konfigureerige konteineripildid Systemd teenuse alt automaatseks käivitamiseks

Selles jaotises keskendume sellele, kuidas saab konteineri konfigureerida töötama otse RHEL-süsteemis kui systemd-teenust.

Kõigepealt hankige eelistatud pilt. Sel juhul oleme Redise pildi doki keskusest välja tõmmanud:

# podman pull docker.io/redis

Kui teie süsteemis töötab SELinux, peate süsteemigad konteinerite käitamiseks aktiveerima logiarve container_manage_cgroup.

# setsebool -p container_manage_cgroup on

Seejärel käivitage konteineri pilt taustal ja määrake see eelistatud pildi nimele. Selles näites oleme oma pildi nimetanud redis_server ja kaardistanud pordi 6379 konteinerist meie RHEL 8 hostile

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

Järgmisena loome kataloogis/etc/systemd/system/redis redisimiseks systemd üksuse konfiguratsioonifaili.

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

Kleepige allolev sisu faili.

[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

Salvestage ja väljuge failist.

Järgmisena konfigureerige konteiner automaatselt käivitamisel käivitama.

# systemctl enable redis-container.service

Järgmisena käivitage konteiner ja kontrollige selle olekut.

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

Konfigureerige konteineripiltide püsiv salvestusruum

Konteinerite käitamisel on mõistlik seadistada hostil püsiv väline salvestusruum. See annab varukoopia juhuks, kui konteiner kukub alla või eemaldatakse kogemata.

Andmete säilitamiseks kaardistame hostis asuva kataloogi konteineri sees olevasse kataloogi.

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

Valik - privilegeeritud antakse üle, kui SELinux on seatud jõustamisele. Valik -v määrab hostil asuva välise helitugevuse. Siin on konteineri maht kataloog/mnt.

Kui oleme kestale juurde pääsenud, loome kataloogi/mnt näidisfaili testing.txt, nagu näidatud.

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

Seejärel väljume konteinerist ja kontrollime, kas fail on hostis asuvas välises mälus

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

Väljund ⇒ See testib püsivat välismälu.

Konteinerite peatamine ja eemaldamine

Kui olete oma konteineri käitamise lõpetanud, saate selle peatada, kasutades käsku podman stop, millele järgneb konteiner-id, mille saate käsu podman ps alt.

# podman stop container-id

Enam mittevajalike konteinerite eemaldamiseks veenduge kõigepealt, et see peatuksite ja seejärel kutsuge suvandina käsk podman rm, millele järgneb konteineri ID või nimi.

# podman rm container-id

Mitme konteineri eemaldamiseks korraga ühes käsus määrake tühikutega eraldatud konteinerite ID-d.

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

Kõigi konteinerite tühjendamiseks käivitage käsk:

# podman rm -a

Pildi eemaldamine

Kujutise eemaldamiseks veenduge kõigepealt, et kõik piltidelt sündinud konteinerid oleksid peatatud ja eemaldatud, nagu eelmises alateemas käsitletud.

Seejärel jätkake ja käivitage käsk podman -rmi , millele järgneb pildi ID, nagu näidatud:

# podman -rmi image-id

Järeldus

See koondab selle peatüki konteinerite haldamise ja töötamise kohta RHEL 8-s. Loodame, et see juhend andis korraliku ülevaate konteineritest ja sellest, kuidas saate Podmani ja Skopeot kasutades oma RHEL-süsteemis suhelda ja neid hallata.