Wéi verwalten Container mat Podman a Skopeo an RHEL 8


Ee vun den Erausfuerderungen, déi d'Entwéckler an der Vergaangenheet konfrontéiert hunn, ass d'Applikatiounen ze kréien fir zouverlässeg iwwer verschidde Informatikëmfeld ze lafen. Oft hunn d'Applikatiounen net wéi erwaart lafen oder op Feeler begéint a ganz gescheitert. An dat ass wou d'Konzept vu Container gebuer gouf.

Wat sinn Container Biller?

Container Biller si statesch Dateien déi mat ausführbare Code verschéckt ginn, deen an engem isoléierten Ëmfeld leeft. E Containerbild enthält Systembibliothéiken, Ofhängegkeeten an aner Plattformastellungen déi d'Applikatioun brauch fir a verschiddenen Ëmfeld ze lafen.

Red Hat Linux bitt eng Rei vun nëtzlechen Container Tools, déi Dir benotze kënnt fir direkt mat Linux Container ze schaffen andeems Dir Docker Kommandoen erfuerdert. Dës enthalen:

  • Podman - Dëst ass en Daemon manner Containermotor fir OCI Container an entweder root oder rootless Modus ze lafen an ze managen. Podman ass ähnlech wéi Docker an huet déiselwecht Kommandooptiounen ausser datt Docker en Daemon ass. Dir kënnt Containerbiller zéien, lafen a verwalten mat Podman op vill déiselwecht Manéier wéi Dir mat Docker géift. Podman kënnt mat vill fortgeschratt Fonctiounen, komplett integréiert mat Systemer, a bitt Benotzer Namespace Ënnerstëtzung déi Lafen Container ouni de Besoin vun engem root Benotzer enthält.
  • Skopeo: Dëst ass e Kommandozeilinstrument dat benotzt gëtt fir Containerbiller vun engem Registry an en anert ze kopéieren. Dir kënnt Skopeo benotze fir Biller op a vun engem bestëmmte Host ze kopéieren wéi och Biller an eng aner Containerregistrierung oder Ëmfeld ze kopéieren. Ausser Biller ze kopéieren, kënnt Dir et benotze fir Biller aus verschiddene Registratiounen z'inspektéieren an Ënnerschrëften ze benotzen fir Biller ze kreéieren an z'iwwerpréiwen.
  • Buildah: Dëst ass eng Rei vu Kommandozeilen Tools déi benotzt gi fir Container OCI Biller mat Docker Dateien ze kreéieren an ze managen.

An dësem Artikel konzentréiere mir eis op d'Gestioun vu Container mat Podman a Skopeo.

Sich Container Biller vun engem Remote Registry

De Podman Sichbefehl erlaabt Iech ausgewielte Fernregistréiere fir Containerbilder ze sichen. D'Standardlëscht vun de Registry ass definéiert an der registries.conf Datei am /etc/containers/ Verzeichnis.

D'Registrierunge ginn duerch 3 Sektiounen definéiert.

  • [registries.search] - Dës Sektioun spezifizéiert d'Standardregistrierungen déi Podman no Containerbiller sichen kann. Et sicht no dat ugefrote Bild an de Registry.access.redhat.com, registry.redhat.io, an docker.io Registry.

  • [registries.insecure]– Dës Sektioun spezifizéiert Registryen déi keng TLS Verschlësselung implementéieren dh onsécher Registries. Par défaut gi keng Entréen uginn.

  • [registries.block] - Dëst blockéiert oder verweigert Zougang zu de spezifizéierte Registry vun Ärem lokalen System. Par défaut gi keng Entréen uginn.

Als normale (net-root) Benotzer deen de Podman Kommando leeft, kënnt Dir Är eege registries.conf Datei op Ärem Heemverzeechnes definéieren ($HOME/.config/containers/registries.conf) fir systembreet Astellungen ze iwwerschreiden.

Wann Dir d'Registriere spezifizéiert, bedenkt déi folgend:

  • All Registry soll vun eenzelen Zitater zougemaach ginn.
  • Registrierunge kënnen entweder mat engem Hostnumm oder IP Adress spezifizéiert ginn.
  • Wann e puer Registry spezifizéiert sinn, da solle se mat Komma getrennt sinn.
  • Wann e Registry en net-Standard Hafen benotzt - entweder Port TCP Ports 443 fir sécher an 80 fir onsécher, - soll d'Portnummer nieft dem Registry Numm spezifizéiert ginn, z.B. registry.example.com:5566.

Fir e Registry no engem Containerbild mat der Syntax ze sichen:

# podman search registry/container_image

Zum Beispill, fir no engem Redis Bild an der Registry.redhat.io Registry ze sichen, rufft de Kommando op:

# podman search registry.redhat.io/redis

Fir no engem MariaDB Container Bild ze sichen lafen.

# podman search registry.redhat.io/mariadb

Fir eng detailléiert Beschreiwung vun engem Containerbild ze kréien, benotzt d'Optioun --no-trunc virum Numm vum Containerbild aus de Resultater déi Dir kritt. Zum Beispill probéieren mir eng detailléiert Beschreiwung vum MariaDB Containerbild ze kréien wéi gewisen:

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

Pull Container Biller

Containerbilder aus engem Remote Registry zéien oder zréckzéien erfuerdert datt Dir als éischt authentifizéiere ier soss eppes. Zum Beispill, fir d'MariaDB Containerbild zréckzekommen, loggt Iech als éischt an de Redhat Registry un:

# podman login

Gitt Äre Benotzernumm a Passwuert a dréckt 'ENTER'op Ärer Tastatur. Wann alles gutt geet, sollt Dir eng Bestätegungsmeldung kréien datt de Login an d'Registry erfollegräich war.

Login Succeeded!

Elo kënnt Dir d'Bild zéien mat der Syntax gewisen:

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

De <registry> bezitt sech op de Fernhost oder Registry, deen e Repository vu Containerbiller op der TCP <port> ubitt. De <namespace> an den <name> spezifizéieren zesummen e Containerbild op Basis vum <namespace> am Registry. Schlussendlech spezifizéiert d'Optioun <tag> d'Versioun vum Containerbild. Wann keen spezifizéiert ass, gëtt de Standardtag - lescht - benotzt.

Et ass ëmmer recommandéiert vertrauenswürdege Registratiounen derbäi ze ginn, dat sinn déi, déi Verschlësselung ubidden an net anonym Benotzer erlaben Konte mat zoufälleg Nimm ze spawnen.

Fir de MariaDB Bild ze zéien, fuert de Kommando:

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

  • Den <registry> – registry.redhat.io
  • De <namespace> – rhel8
  • De <name> – MariaDB
  • De <tag> – 103

Fir spéider Container Biller ze zéien, ass keng weider Umeldung erfuerderlech well Dir scho authentifizéiert sidd. Fir e Redis Container Bild ze zéien, lafen einfach:

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

Oplëschtung Container Biller

Wann Dir fäerdeg sidd d'Biller ze zéien, kënnt Dir d'Biller kucken, déi aktuell op Ärem Host existéieren, andeems Dir de Podman Biller Kommando ausféiert.

# podman images

Inspektioun Container Biller

Ier Dir e Container leeft, ass et ëmmer eng gutt Iddi d'Bild z'ënnersichen an ze verstoen wat et mécht. De Podman Inspect Kommando dréckt e Mier vu Metadaten iwwer de Container aus wéi d'OS an d'Architektur.

Fir e Bild z'inspektéieren, lafen de Podman Inspect Kommando gefollegt vun der Bild ID oder Repository.

# podman inspect IMAGE ID
OR
# podman inspect REPOSITORY

Am Beispill hei drënner iwwerpréift mir de MariaDB Container.

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

Fir spezifesch Metadaten fir e Container ze zéien, passéiert d'Optioun --format, gefollegt vun de Metadaten an d'Identitéit vum Container (Bild ID oder Numm).

Am Beispill hei drënner recuperéiere mir Informatioun iwwer d'Architektur an d'Beschreiwung vum RHEL 8 Basisbehälter deen ënner der Rubrik 'Labels' fällt.

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

Fir e Fernbild vun engem anere Registry z'iwwerpréiwen, benotzt de Skopeo Inspect Kommando. Am Beispill hei drënner iwwerpréift mir en RHEL 8 Init Bild gehost op Docker.

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

Tagging Container Biller

Wéi Dir vläicht bemierkt hutt, sinn d'Bildnimm normalerweis generesch an der Natur. Zum Beispill gëtt d'Redis Bild markéiert:

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

Biller ze taggen ginn hinnen e méi intuitiven Numm fir besser ze verstoen wat se enthalen. Mat dem Podman Tag Kommando kënnt Dir e Bildtag erstellen deen am Wesentlechen en Alias fir e Bildnumm ass deen verschidden Deeler enthält.

Dat sinn:

registry/username/NAME:tag

Zum Beispill, fir de generesche Numm vum Redis Bild z'änneren, deen eng ID vun 646f2730318c huet, wäerte mir de Kommando ausféieren:

# podman tag 646f2730318c myredis

Fir en Tag um Enn derbäizefügen, füügt e vollen Doppelpunkt gefollegt vun der Tagnummer:

# podman tag 646f2730318c myredis:5.0

Ouni d'Tagnummer bäizefügen, gëtt et just d'Attributer lescht zougewisen.

Lafen Container Biller

Fir e Container ze lafen, benotzt de Podman Run Kommando. Zum Beispill:

# podman run image_id

Fir e Container roueg am Hannergrond als Daemon Service ze lafen benotzt d'Optioun -d wéi gewisen.

# podman run -d image_id

Zum Beispill, fir de Redis Bild mat ID 646f2730318c ze lafen, ruffe mir de Kommando op:

# podman run -d 646f2730318c

Wann Dir e Container baséiert op engem Betribssystem wéi RHEL 8 Basisbild leeft, kënnt Dir Zougang zu der Shell mat der -it Direktiv kréien. D'Optioun -i erstellt eng interaktiv Sessioun wärend de -t eng Terminal Sessioun spawnt. D'Optioun --name setzt den Containernumm op mybash wärend d'ecbc6f53bba0 Bild ID vum Basisbild ass.

# podman run -it --name=mybash ecbc6f53bba0

Duerno kënnt Dir all Shell Kommandoen ausféieren. Am Beispill hei drënner verifizéiere mir d'OS Versioun vum Containerbild.

# cat /etc/os-release

Fir de Container ze verloossen, rufft einfach den Ausgangskommando un.

# exit

Wann de Container erausgeet, stoppt en automatesch. Fir de Container erëm ze starten, benotzt de Podman Start Kommando mam -ai Fändel wéi gewisen.

# podman start -ai mybash

Nach eng Kéier gëtt dëst Iech Zougang zu der Schuel.

Oplëschtung Lafen Container Biller

Fir aktuell Lafen Container ze lëschten, benotzt de Podman ps Kommando wéi gewisen.

# podman ps

Fir all Container ze gesinn, och déi, déi nom Laafen erausgaang sinn, benotzt de Kommando:

# podman ps -a

Configuréieren Container Biller fir Auto Start Ënner Systemd Service

An dëser Sektioun konzentréiere mir eis op wéi e Container konfiguréiert ka ginn fir direkt op engem RHEL System als systemd Service ze lafen.

Als éischt, kritt Är Lieblingsbild. An dësem Fall hu mir de Redis Bild vum Docker Hub gezunn:

# podman pull docker.io/redis

Wann Dir SELinux op Ärem System leeft, musst Dir de Container_manage_cgroup Boolean aktivéieren fir Container mat systemd ze lafen.

# setsebool -p container_manage_cgroup on

Fuert duerno d'Containerbild am Hannergrond a gitt et op Äre gewënschte Bildnumm. An dësem Beispill hu mir eise Bild redis_server benannt an den Hafen 6379 vum Container op eise RHEL 8 Host kartéiert

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

Als nächst wäerte mir eng systemd Eenheetskonfiguratiounsdatei erstellen fir Redis am /etc/systemd/system/ Verzeichnis.

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

Paste den Inhalt hei drënner an d'Datei.

[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

Späichert a gitt d'Datei aus.

Als nächst konfiguréiert de Container fir automatesch beim Bootup unzefänken.

# systemctl enable redis-container.service

Als nächst fänkt de Container un a verifizéiert säi Lafenstatus.

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

Persistent Lagerung fir Container Biller konfiguréieren

Wann Dir Container leeft, ass et virsiichteg fir persistent extern Späichere um Host ze konfiguréieren. Dëst bitt e Backup am Fall wou de Container ofbriechen oder zoufälleg ewechgeholl gëtt.

Fir d'Donnéeën z'erhalen, wäerte mir e Verzeechnes am Host op e Verzeechnes am Container kartéieren.

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

D'Optioun --privilegéiert gëtt passéiert wann SELinux agestallt ass fir duerchzesetzen. D'Optioun -v spezifizéiert den externen Volume deen um Host läit. De Containervolumen hei ass den/mnt Verzeechnes.

Wann mir d'Schuel zougräifen, gi mir eng Probe Datei testing.txt am /mnt Verzeichnis erstellen wéi gewisen.

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

Mir verloossen dann de Container a kontrolléieren ob d'Datei an der externer Späichere gëtt, déi um Host wunnt

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

Ausgang ⇒ Dëst testt persistent extern Späichere.

Stoppen an ewechzehuelen Container

Wann Dir fäerdeg sidd mat Ärem Container ze lafen, kënnt Dir et stoppen mam Podman Stop Kommando gefollegt vun der Container-ID déi Dir vum Podman ps Kommando kritt.

# podman stop container-id

Fir d'Container ze läschen, déi Dir net méi braucht, gitt als éischt sécher datt Dir et stoppt an dann de Podman rm Kommando opruffen, gefollegt vun der Container ID oder Numm als Optioun.

# podman rm container-id

Fir e puer Behälter gläichzäiteg an engem Kommando ze läschen, spezifizéiert d'Container-ID'en vun engem Raum getrennt.

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

Fir all Är Container ze läschen, fuert de Kommando:

# podman rm -a

E Bild erofhuelen

Fir e Bild ze läschen, gitt als éischt sécher datt all Container, déi aus de Biller gespaut sinn, gestoppt a geläscht ginn, wéi am virdrun Ënnerthema diskutéiert.

Als nächst gitt weider a lafen de Podman -rmi Kommando gefollegt vun der ID vum Bild wéi gewisen:

# podman -rmi image-id

Conclusioun

Dëst wéckelt dëst Kapitel iwwer d'Gestioun an d'Aarbecht mat Container an RHEL 8. Mir hoffen, datt dëse Guide en anstännege Verständnis vu Behälter gëtt a wéi Dir se op Ärem RHEL System mat Podman a Skopeo interagéiere kënnt a verwalten.