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 oppsto feil og mislyktes totalt. Og det er der konseptet containers var født.

Hva er containerbilder?

Container 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 containermotor for kjøring og administrasjon OCI beholdere i enten rot- eller rotløs modus. Podman den er lik Docker og har de samme kommandoalternativene bortsett fra det Docker er en demon. Du kan trekke, kjøre og administrere containerbilder ved hjelp av podman omtrent på samme måte som du ville gjort med Docker. Podman kommer med mange avanserte funksjoner, fullt integrert med systems, 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 å 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 Dockers.

I denne artikkelen vil vi fokusere på å administrere beholdere ved hjelp av podman og Skopeo.

Søke containerbilder fra et eksternt register

De podman search lar deg søke i utvalgte eksterne registre etter containerbilder. Standardlisten over registre er definert i registries.conf ligger i /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 registry.access.redhat.com, registry.redhat.io, og docker.io registre.
Standard registre
  • [registries.insecure]– Denne delen spesifiserer registre som ikke implementerer TLS-kryptering, dvs. usikre registre. Som standard er ingen oppføringer spesifisert.
Usikre registre
Usikre registre
  • [registries.block] – Dette blokkerer eller nekter tilgang til de spesifiserte registrene fra ditt lokale system. Som standard er ingen oppføringer spesifisert.
Blokkerer registre
Blokkerer registre

Som vanlig (non-root) bruker som kjører podman-kommandoen, kan du definere din egen registries.conf på 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 eksempel å søke etter en Redis bildet i registry.redhat.io register, påkalle kommandoen:

# podman search registry.redhat.io/redis
Søk i registeret etter containerbilde
Søk i registeret etter containerbilde

For å søke etter en MariaDB beholderbildekjøring.

# podman search registry.redhat.io/mariadb
Søk i MariaDB Container Image
Søk i MariaDB Container Image

For å få en detaljert beskrivelse av et beholderbilde, bruk –no-trunc før 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
Listebeskrivelse av MariaDB Container Image
Listebeskrivelse av MariaDB Container Image

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>

De <registry> refererer til den eksterne verten eller registret som gir et oppbevaringssted for beholderbilder på TCP <port>. De <namespace> og <name> kollektivt spesifisere et beholderbilde basert på <namespace> på registeret. Til slutt, den <tag> angir 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
  • De <registry> – registry.redhat.io
  • De <namespace> – rhel8
  • De <name> – MariaDB
  • De <tag> – 103
Trekk MariaDB-bilde
Trekk MariaDB-bilde

For påfølgende beholderbilder er det ikke nødvendig å logge på lenger siden du allerede er autentisert. Å trekke en Redis beholderbilde, bare kjør:

# podman pull registry.redhat.io/rhscl/redis-5-rhel7
Trekk Redis Container Image
Trekk Redis Container Image

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
List beholderebilder
List beholderebilder

Inspiserer containerbilder

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

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

# podman inspect IMAGE ID
OR
# podman inspect REPOSITORY

I eksemplet nedenfor inspiserer vi MariaDB container.

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

For å trekke spesifikke metadata for en beholder passerer –format etterfulgt av metadataene og beholderens identitet (bilde-ID eller navn).

I eksemplet nedenfor henter vi informasjon om arkitekturen og beskrivelsen av RHEL 8-basebeholderen som faller inn under ‘Labels‘ seksjon.

# podman inspect --format=’{{.Labels.architecture}}’ image ID
# podman inspect --format=’{{.Labels.description}}’ image ID
Få informasjon om containerarkitektur
Få informasjon om containerarkitektur

For å inspisere et eksternt bilde fra et annet register, bruk skopeo inspect. 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
Inspiser eksternt bilde fra Docker Registry
Inspiser eksternt bilde fra Docker Registry

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. Bruker podman tagkan 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 eksempel for å endre det generiske navnet på Redis-bildet som har en ID på 646f2730318c vil vi 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.

Angi navn for Redis-beholderbilde
Angi navn for Redis-beholderbilde

Kjøre containerbilder

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

# podman run image_id

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

# podman run -d image_id

For eksempel å kjøre redis bilde med ID 646f2730318cvil vi påkalle kommandoen:

# podman run -d 646f2730318c
Kjør Redis Container Images
Kjør Redis Container Images

Hvis du kjører en container basert på et operativsystem som f.eks RHEL 8 basisbilde, kan du få tilgang til skallet ved å bruke -it direktiv. De -i oppretter en interaktiv økt mens -t skaper en terminalsesjon. De –name setter beholdernavnet til mybash mens er ecbc6f53bba0 bilde-ID for 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
Bekreft Container Image OS-versjon
Bekreft Container Image OS-versjon

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

# exit

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

# podman start -ai mybash

Nok en gang gir dette deg tilgang til skallet.

Start Container Images
Start Container Images

Oppføring av kjørende containerbilder

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

# podman ps
Liste kjørende containerbilder
Liste kjørende containerbilder

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

# podman ps -a
Se alle containerbilder
Se alle containerbilder

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 trukket Redis bilde fra docker hub:

# podman pull docker.io/redis

Hvis du har SELinux kjørende på systemet ditt, må du aktivere container_manage_cgroup boolsk å 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 navngitt bildet vårt redis_server og kartla havnen 6379 fra containeren til vår RHEL 8 vert

# podman run -d --name redis_server -p 6379:6379 redis
Kjør containerbilde i bakgrunnen
Kjør containerbilde i bakgrunnen

Deretter skal vi lage en systemd enhetskonfigurasjonsfil for redis i /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
Bekreft beholderbildestatus
Bekreft beholderbildestatus

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

De –privileged er bestått når SELinux er satt til å håndheve. De -v spesifiserer det eksterne volumet som er plassert på verten. Beholdervolumet her er /mnt.

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

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

Det vil vi da exit beholderen og sjekk om filen finnes i det eksterne lageret som ligger på verten

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

Utgang ⇒ This tests persistent external storage.

Konfigurer vedvarende lagring for containere
Konfigurer vedvarende lagring for containere

Stoppe og fjerne beholdere

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

# podman stop container-id
Stopp beholderbilde
Stopp beholderbilde

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

# podman rm container-id

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

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

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

# podman rm -a
Fjern alle beholdere
Fjern alle beholdere

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 podman -rmi etterfulgt av ID-en til bildet som vist:

# podman -rmi image-id
Fjern bilde
Fjern bilde

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å din RHEL systemet bruker podman og Skopeo.