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
Utgang ⇒ Dette 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.