Jinsi ya Kudhibiti Vyombo kwa Kutumia Podman na Skopeo katika RHEL 8


Mojawapo ya changamoto ambazo wasanidi programu walikabiliana nazo hapo awali ni kupata programu kufanya kazi kwa uaminifu katika mazingira mengi ya kompyuta. Mara nyingi, programu hazikufanya kazi kama ilivyotarajiwa au zilipata hitilafu na hazikufaulu kabisa. Na hapo ndipo dhana ya makontena ilipozaliwa.

Picha za Kontena ni nini?

Picha za kontena ni faili tuli ambazo husafirishwa na msimbo unaoweza kutekelezeka ambao hutumika katika mazingira ya pekee. Picha ya kontena inajumuisha maktaba za mfumo, vitegemezi na mipangilio mingine ya jukwaa inayohitajika na programu kufanya kazi katika mazingira tofauti.

Red Hat Linux hutoa seti ya zana muhimu za kontena ambazo unaweza kutumia ili kufanya kazi moja kwa moja na vyombo vya Linux kwa kutumia amri zinazohitaji docker. Hizi ni pamoja na:

  • Podman - Hii ni injini ya kontena ndogo ya daemon ya kuendesha na kudhibiti vyombo vya OCI katika hali ya mzizi au isiyo na mizizi. Podman ni sawa na Docker na ina chaguzi sawa za amri isipokuwa kwamba Docker ni daemon. Unaweza kuvuta, kukimbia, na kudhibiti picha za kontena ukitumia podman kwa njia sawa na vile ungefanya na Docker. Podman inakuja na vipengele vingi vya kina, inaunganishwa kikamilifu na mifumo, na inatoa usaidizi wa Nafasi ya Jina ya mtumiaji ambayo inajumuisha kuendesha vyombo bila hitaji la mtumiaji wa mizizi.
  • Skopeo: Hiki ni zana ya mstari wa amri inayotumika kunakili picha za kontena kutoka kwa sajili moja hadi nyingine. Unaweza kutumia Skopeo kunakili picha kwa na kutoka kwa seva pangishi fulani na vile vile kunakili picha kwenye sajili nyingine ya kontena au mazingira. Kando na kunakili picha, unaweza kuitumia kukagua picha kutoka kwa sajili mbalimbali na kutumia sahihi kuunda na kuthibitisha picha.
  • Buildah: Hii ni seti ya zana za mstari wa amri zinazotumika kuunda na kudhibiti picha za kontena za OCI kwa kutumia faili za Docker.

Katika makala hii, tutazingatia Kusimamia vyombo kwa kutumia podman na Skopeo.

Inatafuta Picha za Kontena kutoka kwa Usajili wa Mbali

Amri ya utafutaji ya podman hukuruhusu kutafuta sajili za mbali zilizochaguliwa kwa picha za kontena. Orodha chaguo-msingi ya sajili imefafanuliwa katika faili ya registries.conf iliyoko kwenye saraka /etc/containers/.

Usajili unafafanuliwa na sehemu 3.

  • [registries.search] - Sehemu hii inabainisha sajili chaguo-msingi ambazo podman inaweza kutafuta picha za makontena. Hutafuta picha iliyoombwa kwenye registry.access.redhat.com, registry.redhat.io, na sajili za docker.io.

  • [registries.insecure]– Sehemu hii inabainisha sajili ambazo hazitekelezi usimbaji fiche wa TLS yaani sajili zisizo salama. Kwa chaguo-msingi, hakuna maingizo yamebainishwa.

  • [registries.block] - Hii inazuia au inakataa ufikiaji wa sajili maalum kutoka kwa mfumo wako wa ndani. Kwa chaguo-msingi, hakuna maingizo yamebainishwa.

Kama mtumiaji wa kawaida (asiye na mizizi) anayeendesha amri ya podman, unaweza kufafanua faili yako mwenyewe ya registries.conf kwenye saraka yako ya nyumbani ($HOME/.config/containers/registries.conf) ili kubatilisha mipangilio ya mfumo mzima.

Unapobainisha rejista, kumbuka yafuatayo:

  • Kila sajili inapaswa kuambatanishwa na nukuu moja.
  • Rejesta zinaweza kubainishwa kwa kutumia jina la mpangishaji au anwani ya IP.
  • Ikiwa sajili nyingi zimebainishwa, basi zinapaswa kutengwa kwa koma.
  • Kama sajili inatumia lango lisilo la kawaida - ama lango la TCP 443 kwa usalama na 80 kwa usalama, - nambari ya mlango inapaswa kubainishwa pamoja na jina la usajili k.m. registry.example.com:5566.

Kutafuta sajili kwa picha ya chombo kwa kutumia syntax:

# podman search registry/container_image

Kwa mfano, ili kutafuta picha ya Redis kwenye sajili ya registry.redhat.io, omba amri:

# podman search registry.redhat.io/redis

Ili kutafuta taswira ya chombo cha MariaDB endesha.

# podman search registry.redhat.io/mariadb

Ili kupata maelezo ya kina ya picha ya chombo, tumia chaguo la --no-trunc kabla ya jina la picha ya chombo kutoka kwa matokeo unayopata. Kwa mfano, tutajaribu kupata maelezo ya kina ya picha ya chombo cha MariaDB kama inavyoonyeshwa:

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

Kuvuta Picha za Kontena

Kuvuta au kurejesha picha za kontena kutoka kwa sajili ya mbali kunahitaji kwamba uthibitishe kwanza kabla ya kitu kingine chochote. Kwa mfano, ili kupata picha ya chombo cha MariaDB, ingia kwanza kwenye sajili ya Redhat:

# podman login

Toa jina lako la mtumiaji na nenosiri na ugonge 'INGIA' kwenye kibodi yako. Ikiwa kila kitu kitaenda vizuri, unapaswa kupata ujumbe wa uthibitisho kwamba kuingia kwenye Usajili kulifanikiwa.

Login Succeeded!

Sasa, unaweza kuvuta picha kwa kutumia syntax iliyoonyeshwa:

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

<registry> inarejelea seva pangishi ya mbali au sajili ambayo hutoa hifadhi ya picha za kontena kwenye TCP <port>. <namespace> na <name> kwa pamoja zinabainisha picha ya chombo kulingana na <namespace> kwenye sajili. Hatimaye, chaguo la <tag> hubainisha toleo la picha ya chombo. Ikiwa hakuna iliyotajwa, lebo ya chaguo-msingi - ya hivi karibuni - inatumiwa.

Inapendekezwa kila mara kuongeza sajili zinazoaminika, ambazo ni zile zinazotoa usimbaji fiche na haziruhusu watumiaji wasiojulikana kuibua akaunti zilizo na majina nasibu.

Ili kuvuta picha ya MariaDB, endesha amri:

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

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

Kwa picha za kontena zinazofuata za kuvuta, hakuna kuingia tena kunahitajika kwa kuwa tayari umeidhinishwa. Ili kuvuta picha ya chombo cha Redis, endesha tu:

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

Kuorodhesha Picha za Kontena

Mara tu unapomaliza kuvuta picha, unaweza kutazama picha zilizopo kwa mwenyeji wako kwa kuendesha amri ya picha za podman.

# podman images

Kukagua Picha za Kontena

Kabla ya kuendesha chombo, daima ni wazo nzuri kuchunguza picha na kuelewa kile kinachofanya. Amri ya ukaguzi wa podman huchapisha bahari ya metadata kuhusu kontena kama vile OS na Usanifu.

Ili kukagua picha, endesha amri ya ukaguzi wa podman ikifuatiwa na kitambulisho cha picha au hifadhi.

# podman inspect IMAGE ID
OR
# podman inspect REPOSITORY

Katika mfano hapa chini, tunakagua chombo cha MariaDB.

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

Ili kuvuta metadata mahususi ya kontena pitisha chaguo la --format ikifuatiwa na metadata na utambulisho wa chombo ( Kitambulisho cha picha au jina ).

Katika mfano ulio hapa chini, tunarejesha maelezo kuhusu usanifu na maelezo ya chombo cha msingi cha RHEL 8 ambacho kiko chini ya sehemu ya 'Lebo'.

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

Ili kukagua picha ya mbali kutoka kwa Usajili mwingine, tumia amri ya ukaguzi wa skopeo. Katika mfano ulio hapa chini, tunakagua picha ya RHEL 8 init iliyopangishwa kwenye Docker.

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

Kuweka Tagi Picha za Kontena

Kama unavyoweza kuwa umegundua, majina ya picha kawaida huwa ya kawaida. Kwa mfano, picha ya redis imeandikwa:

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

Kuweka tagi picha huwapa jina angavu zaidi ili kuelewa vyema yaliyomo. Kwa kutumia amri ya lebo ya podman, unaweza kuunda lebo ya picha ambayo kimsingi ni lakabu kwa jina la picha ambalo linajumuisha sehemu tofauti.

Hizi ni:

registry/username/NAME:tag

Kwa mfano, ili kubadilisha jina la jumla la picha ya Redis ambayo ina kitambulisho cha 646f2730318c , tutatekeleza amri:

# podman tag 646f2730318c myredis

Ili kuongeza lebo mwishoni ongeza koloni kamili ikifuatiwa na nambari ya lebo:

# podman tag 646f2730318c myredis:5.0

Bila kuongeza nambari ya lebo, itapewa tu sifa ya hivi punde.

Picha za Kontena zinazoendesha

Ili kuendesha chombo, tumia amri ya kukimbia ya podman. Kwa mfano:

# podman run image_id

Ili kuendesha kontena kimya chini kama huduma ya daemoni tumia chaguo la -d kama inavyoonyeshwa.

# podman run -d image_id

Kwa mfano, ili kuendesha picha ya redis na ID 646f2730318c, tutaomba amri:

# podman run -d 646f2730318c

Ikiwa unatumia kontena kulingana na mfumo wa uendeshaji kama vile picha ya msingi ya RHEL 8, unaweza kupata ufikiaji wa ganda kwa kutumia maagizo ya -it. Chaguo la -i huunda kipindi wasilianifu huku -t ikianzisha kipindi cha mwisho. Chaguo la --name huweka jina la chombo kuwa mybash huku ni kitambulisho cha picha cha ecbc6f53bba0 cha picha ya msingi.

# podman run -it --name=mybash ecbc6f53bba0

Baada ya hapo, unaweza kuendesha amri zozote za ganda. Katika mfano ulio hapa chini, tunathibitisha toleo la OS la picha ya chombo.

# cat /etc/os-release

Ili kuondoka kwenye chombo, omba tu amri ya kutoka.

# exit

Mara tu chombo kinapotoka, huacha kiotomatiki. Ili kuanzisha kontena tena, tumia amri ya kuanza kwa podman na alama ya -ai kama inavyoonyeshwa.

# podman start -ai mybash

Kwa mara nyingine tena, hii inakupa ufikiaji wa ganda.

Kuorodhesha Picha za Kontena zinazoendesha

Ili kuorodhesha vyombo vinavyoendeshwa kwa sasa, tumia amri ya podman ps kama inavyoonyeshwa.

# podman ps

Kuangalia vyombo vyote ikiwa ni pamoja na vile ambavyo vimetoka baada ya kukimbia, tumia amri:

# podman ps -a

Sanidi Picha za Kontena ili Kuanza Kiotomatiki Chini ya Huduma ya Mfumo

Katika sehemu hii, tunaangazia jinsi kontena linaweza kusanidiwa ili kuendeshwa moja kwa moja kwenye mfumo wa RHEL kama huduma ya mfumo.

Kwanza, pata picha unayopendelea. Katika kesi hii, tumechota picha ya Redis kutoka kwa kitovu cha kizimbani:

# podman pull docker.io/redis

Ikiwa una SELinux inayoendesha kwenye mfumo wako, unahitaji kuwezesha chombo_manage_cgroup boolean ili kuendesha vyombo na systemd.

# setsebool -p container_manage_cgroup on

Baada ya hapo, endesha picha ya kontena chinichini na uikabidhi kwa jina lako la picha unalopendelea. Katika mfano huu, tumeita picha yetu redis_server na kuweka bandari 6379 kutoka kwenye kontena hadi mwenyeji wetu wa RHEL 8.

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

Ifuatayo, tutaunda faili ya usanidi wa kitengo cha mfumo kwa redis kwenye saraka /etc/systemd/system/.

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

Bandika yaliyomo hapa chini kwenye 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

Hifadhi na uondoke faili.

Ifuatayo, sanidi kontena ili kuanza kiotomatiki kwenye uanzishaji.

# systemctl enable redis-container.service

Ifuatayo, anza kontena na uthibitishe hali yake ya kufanya kazi.

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

Sanidi Hifadhi Inayodumu kwa Picha za Kontena

Unapoendesha vyombo, ni busara kusanidi hifadhi ya nje inayoendelea kwenye seva pangishi. Hii hutoa nakala rudufu ikiwa kontena itaanguka au kuondolewa kwa bahati mbaya.

Ili kuendeleza data, tutaweka ramani saraka iliyo katika seva pangishi kwenye saraka ndani ya kontena.

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

Chaguo la --privileged hupitishwa wakati SELinux imewekwa kutekelezwa. Chaguo la -v hubainisha sauti ya nje ambayo iko kwenye seva pangishi. Kiasi cha kontena hapa ni saraka ya /mnt.

Mara tu tumefikia shell, tutaunda sampuli ya faili testing.txt katika saraka ya /mnt kama inavyoonyeshwa.

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

Kisha tutatoka kwenye kontena na kuangalia ikiwa faili iko kwenye hifadhi ya nje inayokaa kwenye seva pangishi

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

Pato ⇒ Hii hujaribu hifadhi ya nje inayoendelea.

Kusimamisha na Kuondoa Vyombo

Mara tu unapomaliza kuendesha chombo chako, unaweza kuisimamisha kwa kutumia amri ya kusimamisha podman ikifuatiwa na kitambulisho cha chombo ambacho unaweza kupata kutoka kwa amri ya podman ps.

# podman stop container-id

Ili kuondoa vyombo ambavyo huvihitaji tena, kwanza, hakikisha kwamba umesimamisha na kisha omba amri ya podman rm ikifuatiwa na kitambulisho cha chombo au jina kama chaguo.

# podman rm container-id

Ili kuondoa vyombo vingi kwa amri moja, bainisha vitambulisho vya kontena vilivyotenganishwa na nafasi.

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

Ili kufuta vyombo vyako vyote, endesha amri:

# podman rm -a

Kuondoa Picha

Ili kuondoa picha, kwanza, hakikisha kwamba vyombo vyote vilivyotolewa kwenye picha vimesimamishwa na kuondolewa jinsi ilivyojadiliwa katika mada ndogo iliyotangulia.

Ifuatayo, endelea na utekeleze amri ya podman -rmi ikifuatiwa na kitambulisho cha picha kama inavyoonyeshwa:

# podman -rmi image-id

Hitimisho

Hii inahitimisha sura hii ya kudhibiti na kufanya kazi na kontena katika RHEL 8. Tunatumai mwongozo huu umetoa uelewa mzuri wa vyombo na jinsi unavyoweza kuingiliana na kudhibiti kwenye mfumo wako wa RHEL kwa kutumia podman na Skopeo.