Hvordan administrere containere ved hjelp av Podman og Skopeo i RHEL 8


En av utfordringene utviklere har møtt tidligere, er å få applikasjoner til å kjøre pålitelig på tvers av flere datamiljøer. Ofte kjørte ikke applikasjoner som forventet eller oppdaget feil og mislyktes totalt. Og det var der konseptet beholdere ble født.

Hva er containerbilder?

Beholder-bilder er statiske filer som leveres med kjørbar kode som kjører i et isolert miljø. Et beholderbilde omfatter systembiblioteker, avhengigheter og andre plattforminnstillinger som applikasjonen trenger for å kjøre i forskjellige miljøer.

Red Hat Linux gir et sett med nyttige containerverktøy som du kan bruke for å jobbe direkte med Linux-containere ved å bruke docker-kommandoer. Disse inkluderer:

  • Podman – Dette er en demonfri beholdermotor for å kjøre og administrere OCI-beholdere i enten rot- eller rotløs modus. Podman ligner Docker og har de samme kommandoalternativene bortsett fra at Docker er en demon. Du kan trekke, kjøre og administrere containerbilder ved å bruke podman på omtrent samme måte som du ville gjort med Docker. Podman kommer med mange avanserte funksjoner, integreres fullt ut med systemer, og tilbyr brukernavneområdestøtte som inkluderer kjørende containere uten behov for en rotbruker.
  • Skopeo: Dette er et kommandolinjeverktøy som brukes til å kopiere beholderbilder fra ett register til et annet. Du kan bruke Skopeo til å kopiere bilder til og fra en bestemt vert, samt kopiere bilder til et annet containerregister eller miljø. Bortsett fra å kopiere bilder, kan du bruke den til å inspisere bilder fra ulike registre og bruke signaturer for å lage og bekrefte bilder.
  • Buildah: Dette er et sett med kommandolinjeverktøy som brukes til å lage og administrere container OCI-bilder ved hjelp av Docker-filer.

I denne artikkelen vil vi fokusere på å administrere containere ved å bruke podman og Skopeo.

Søke containerbilder fra et eksternt register

Kommandoen podman-søk lar deg søke i utvalgte eksterne registre etter containerbilder. Standardlisten over registre er definert i registries.conf-filen som ligger i katalogen /etc/containers/.

Registrene er definert av 3 seksjoner.

  • [registries.search] – Denne delen spesifiserer standardregistrene som podman kan søke etter containerbilder. Den søker etter det forespurte bildet i registrene registry.access.redhat.com, registry.redhat.io, og docker.io.

  • [registries.insecure]– Denne delen spesifiserer registre som ikke implementerer TLS-kryptering, dvs. usikre registre. Som standard er ingen oppføringer spesifisert.

  • [registries.block] – Dette blokkerer eller nekter tilgang til de spesifiserte registrene fra ditt lokale system. Som standard er ingen oppføringer spesifisert.

Som en vanlig (ikke-root) bruker som kjører podman-kommandoen, kan du definere din egen registries.conf-fil i hjemmekatalogen din ($HOME/.config /containers/registries.conf) for å overstyre systemomfattende innstillinger.

Regler når du spesifiserer registre

Når du spesifiserer registrene, husk følgende:

  • Hvert register skal være omsluttet av enkle anførselstegn.
  • Registre kan spesifiseres med enten et vertsnavn eller IP-adresse.
  • Hvis flere registre er spesifisert, bør de skilles med komma.
  • Hvis et register bruker en ikke-standard port – enten port TCP porter 443 for sikker og 80 for usikker, – bør portnummeret spesifiseres ved siden av registernavnet, f.eks. registry.example.com:5566.

Slik søker du etter et beholderbilde i et register ved å bruke syntaksen:

podman search registry/container_image

For for eksempel å søke etter et Redis-bilde i registry.redhat.io-registeret, start kommandoen:

podman search registry.redhat.io/redis

Kjør for å søke etter et MariaDB-beholderbilde.

podman search registry.redhat.io/mariadb

For å få en detaljert beskrivelse av et beholderbilde, bruk --no-trunc-alternativet foran navnet på beholderbildet fra resultatene du får. For eksempel vil vi prøve å få en detaljert beskrivelse av MariaDB-beholderbildet som vist:

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

Trekker containerbilder

Å trekke eller hente containerbilder fra et eksternt register krever at du først autentiserer før noe annet. For eksempel, for å hente MariaDB-beholderbildet, logger du først på Redhat-registeret:

podman login

Oppgi brukernavn og passord og trykk ENTER' på tastaturet. Hvis alt går bra, bør du få en bekreftelsesmelding om at påloggingen til registeret var vellykket.

Login Succeeded!

Nå kan du trekke bildet ved å bruke syntaksen som vises:

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

<registry> refererer til den eksterne verten eller registret som gir et oppbevaringssted for beholderbilder på TCP <port>. <namespace> og <name> angir samlet et containerbilde basert på <namespace> i registeret. Til slutt spesifiserer alternativet <tag> versjonen av beholderbildet. Hvis ingen er spesifisert, brukes standardkoden – siste –.

Det anbefales alltid å legge til pålitelige registre, det vil si de som gir kryptering og ikke tillater anonyme brukere å skape kontoer med tilfeldige navn.

For å trekke MariaDB-bildet, kjør kommandoen:

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

For påfølgende beholderbilder er det ikke nødvendig å logge på lenger siden du allerede er autentisert. For å hente et Redis-beholderbilde, kjør ganske enkelt:

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

Oppføring av containerbilder

Når du er ferdig med å trekke bildene, kan du se bildene som finnes på verten din ved å kjøre kommandoen podman images.

podman images

Inspisere containerbilder

Før du kjører en container, er det alltid en god idé å undersøke bildet og forstå hva det gjør. Kommandoen podman inspiser skriver ut et hav av metadata om beholderen som OS og arkitektur.

For å inspisere et bilde, kjør kommandoen podman inspect etterfulgt av bilde-IDen eller depotet.

podman inspect IMAGE ID
OR
podman inspect REPOSITORY

I eksemplet nedenfor inspiserer vi MariaDB-beholderen.

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

For å hente spesifikke metadata for en beholder passerer du --format-alternativet etterfulgt av metadataene og beholderidentiteten (bilde-ID eller navn).

I eksemplet nedenfor henter vi informasjon om arkitekturen og beskrivelsen av RHEL 8-basebeholderen som faller inn under «Etiketter»-delen.

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

For å inspisere et eksternt bilde fra et annet register, bruk skopeo inspect-kommandoen. I eksemplet nedenfor inspiserer vi et RHEL 8 init-bilde som er vert på Docker.

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

Merking av containerbilder

Som du kanskje har lagt merke til, er bildenavn vanligvis generiske. For eksempel er redis-bildet merket:

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

Merking av bilder gir dem et mer intuitivt navn for bedre å forstå hva de inneholder. Ved å bruke podman tag-kommandoen kan du lage en bildekode som i hovedsak er et alias til et bildenavn som består av forskjellige deler.

Disse er:

registry/username/NAME:tag

For å endre det generiske navnet på Redis-bildet som har en ID på 646f2730318c, vil vi for eksempel utføre kommandoen:

podman tag 646f2730318c myredis

For å legge til en kode på slutten, legg til et helt kolon etterfulgt av kodenummeret:

podman tag 646f2730318c myredis:5.0

Uten å legge til kodenummeret, vil det bare bli tildelt attributtet senest.

Kjøre containerbilder

For å kjøre en beholder, bruk kommandoen podman run. For eksempel:

podman run image_id

For å kjøre en beholder stille i bakgrunnen som en demontjeneste, bruk -d-alternativet som vist.

podman run -d image_id

For for eksempel å kjøre redis-bildet med ID 646f2730318c, vil vi påkalle kommandoen:

podman run -d 646f2730318c

Hvis du kjører en container basert på et operativsystem som RHEL 8 base image, kan du få tilgang til skallet ved å bruke -it direktivet. Alternativet -i oppretter en interaktiv økt mens -t skaper en terminaløkt. Alternativet --name setter beholdernavnet til mybash mens er ecbc6f53bba0 bilde-IDen til basisbildet.

podman run -it --name=mybash ecbc6f53bba0

Deretter kan du kjøre alle skallkommandoer. I eksemplet nedenfor verifiserer vi OS-versjonen av beholderbildet.

cat /etc/os-release

For å avslutte beholderen, bare påkalle exit-kommandoen.

exit

Når beholderen er avsluttet, stopper den automatisk. For å starte beholderen igjen, bruk podman start-kommandoen med -ai-flagget som vist.

podman start -ai mybash

Nok en gang gir dette deg tilgang til skallet.

Oppføring av kjørende containerbilder

For å liste opp beholdere som kjører for øyeblikket, bruk podman ps-kommandoen som vist.

podman ps

For å se alle beholdere, inkludert de som er avsluttet etter kjøring, bruk kommandoen:

podman ps -a

Konfigurer containerbilder til automatisk start under Systemd Service

I denne delen fokuserer vi på hvordan en container kan konfigureres til å kjøre direkte på et RHEL-system som en systemtjeneste.

Først, få ditt foretrukne bilde. I dette tilfellet har vi hentet Redis-bildet fra docker-huben:

podman pull docker.io/redis

Hvis du har SELinux kjørende på systemet ditt, må du aktivere container_manage_cgroup boolean for å kjøre containere med systemd.

setsebool -p container_manage_cgroup on

Kjør deretter beholderbildet i bakgrunnen og tilordne det til ditt foretrukne bildenavn. I dette eksemplet har vi kalt bildet vårt redis_server og kartlagt porten 6379 fra containeren til RHEL 8-verten vår

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

Deretter skal vi lage en systemd enhetskonfigurasjonsfil for redis i katalogen /etc/systemd/system/.

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

Lim inn innholdet nedenfor i filen.

[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

Lagre og avslutt filen.

Deretter konfigurerer du beholderen til å starte automatisk ved oppstart.

systemctl enable redis-container.service

Deretter starter du beholderen og kontrollerer dens kjørestatus.

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

Konfigurer vedvarende lagring for containerbilder

Når du kjører containere, er det klokt å konfigurere vedvarende ekstern lagring på verten. Dette gir en sikkerhetskopi i tilfelle beholderen krasjer eller blir fjernet ved et uhell.

For å opprettholde dataene, skal vi kartlegge en katalog som ligger i verten til en katalog inne i beholderen.

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

Alternativet --privileged sendes når SELinux er satt til å håndheve. Alternativet -v spesifiserer det eksterne volumet som er plassert på verten. Beholdervolumet her er /mnt-katalogen.

Når vi har fått tilgang til skallet, skal vi lage en eksempelfil testing.txt i /mnt-katalogen som vist.

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

Vi vil deretter avslutte beholderen og sjekke om filen finnes i den eksterne lagringen som ligger på verten

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

UtgangDette tester vedvarende ekstern lagring.

Stoppe og fjerne beholdere

Når du er ferdig med å kjøre beholderen, kan du stoppe den ved å bruke podman stop-kommandoen etterfulgt av container-id som du kan hente fra podman ps< kommando.

podman stop container-id

For å fjerne beholderne du ikke lenger trenger, må du først sørge for at du stopper den og deretter påkalle podman rm-kommandoen etterfulgt av beholder-ID eller navn som et alternativ.

podman rm container-id

For å fjerne flere beholdere på en gang i én kommando, spesifiser beholderens id atskilt med et mellomrom.

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

For å tømme alle beholderne, kjør kommandoen:

podman rm -a

Fjerne et bilde

For å fjerne et bilde, må du først sørge for at alle beholdere som stammer fra bildene, stoppes og fjernes som diskutert i forrige underemne.

Fortsett deretter og kjør kommandoen podman -rmi etterfulgt av ID-en til bildet som vist:

podman -rmi image-id

Konklusjon

Dette avslutter dette kapittelet om administrasjon og arbeid med containere i RHEL 8. Vi håper denne veiledningen ga en anstendig forståelse av containere og hvordan du kan samhandle og administrere dem på RHEL-systemet ditt ved å bruke podman og Skopeo.