Aan de slag met Podman (Docker Alternatief) op Rocky Linux

Podman is een Linux-native hulpmiddel voor het inzetten van toepassingen met Open Container Initiative (OCI) containers en container images. Het ondersteunt meerdere container image formaten, waaronder Docker images en OCI container images. Ook ondersteunt Podman het beheren van pods, groepen containers.

Podman is een daemon-loos gereedschap, dat draait als een enkele binaire command-line zonder een dienst. Het biedt een command-line die lijkt op Docker, je kunt een alias gebruiken zoals ‘alias docker=podman’.

Om containers te draaien en container images te beheren, vertrouwt Podman op libpod en OCI container runtimes zoals runc, crun, en runv.

Vereisten

In deze gids leer je hoe je Podman op het Rocky Linux systeem installeert. Ook leer je het basisgebruik van Podman voor het beheren van containers en container images.

Zorg ervoor dat je, voordat je begint, de volgende vereisten hebt:

  • Besturingssysteem: Rocky Linux 8.4 (Green Obsidian)
  • Root privileges: Voor het installeren van nieuwe pakketten en het bewerken van systeemconfiguratie

Laten we nu de Podman installatie starten.

Podman installeren op Rocky Linux

Standaard levert de Rocky Linux appstream repository podman pakketten.

1. Voer het onderstaande DNF commando uit om informatie over het podman pakket te tonen.

sudo dnf info podman

Je ziet een soortgelijke uitvoer als hieronder.

Last metadata expiration check: 0:07:09 ago on Tue 16 Nov 2021 09:30:27 AM UTC.
Available Packages
Name         : podman
Version      : 3.3.1
Release      : 9.module+el8.5.0+710+4c471e88
Architecture : x86_64
Size         : 12 M
Source       : podman-3.3.1-9.module+el8.5.0+710+4c471e88.src.rpm
Repository   : appstream
Summary      : Manage Pods, Containers and Container Images
URL          : https://podman.io/
License      : ASL 2.0 and GPLv3+
Description  : podman (Pod Manager) is a fully featured container engine that is a simple
             : daemonless tool.  podman provides a Docker-CLI comparable command line that
             : eases the transition from other container engines and allows the management of
             : pods, containers and images.  Simply put: alias docker=podman.
             : Most podman commands can be run as a regular user, without requiring
             : additional privileges.
             :
             : podman uses Buildah(1) internally to create container images.
             : Both tools share image (not container) storage, hence each can use or
             : manipulate images (but not containers) created by the other.
             :
             : Manage Pods, Containers and Container Images
             : podman Simple management tool for pods, containers and images

De appstream repository levert het Podman pakket versie‘3.3.1‘.

2. Installeer Podman met het onderstaande DNF commando.

sudo dnf install podman

Typ‘y’ om te bevestigen en druk op‘Enter‘ om de installatie voort te zetten.

Installeer Podman Rocky Linux

3. Als de Podman installatie voltooid is, controleer je met het volgende commando.

podman version

Je ziet een soortgelijke uitvoer als hieronder.

Version:      3.3.1
API Version:  3.3.1
Go Version:   go1.16.7
Built:        Wed Nov 10 01:48:06 2021
OS/Arch:      linux/amd64

Podman belangrijke configuratie

Het Podman pakket wordt geleverd met enkele standaard configuraties die in de map ‘/etc/containers’ staan.

Hieronder staan enkele Podman configuraties die je moet kennen.

  • policy.json. Beleidsconfiguratie voor het ondertekenen van afbeeldingen.
  • registries.conf. Lijst van beschikbare container image registers, zoals Docker Registry, RHEL Container image register, en Fedora Container images register.
  • storage.conf. Configuratie van standaard opslag voor Podman. Omvat stuurprogramma’s, locatie, enz.
  • Directory registries.d/. Extra configuratie van registers en ondertekening van afbeeldingen.
  • Directory registries.conf.d/. Extra configuratie voor container images aliassen.

Podman map indeling

Nieuwe gebruiker instellen

In deze stap maak je een nieuwe gebruiker aan en controleer je de Podman installatie door het Docker image‘hello-world‘ uit te voeren.

1. Voer het onderstaande commando uit om een nieuwe gebruiker ‘johndoe’ toe te voegen.

useradd -m -s /bin/bash johndoe
passwd johndoe

Typ een nieuw sterk wachtwoord voor gebruiker‘johndoe‘.

2. Log vervolgens in als gebruiker ‘johndoe’ met het volgende commando.

su - johndoe

3. Voer nu het volgende commando uit om een nieuwe container te draaien op basis van het Docker image‘hello-world‘.

podman run hello-world

Je ziet de uitvoer‘Hello World‘ berichten, wat betekent dat de container draait maar nu verlaten is.

? docker.io/library/hello-world:latest
Trying to pull docker.io/library/hello-world:latest...
Getting image source signatures
Copying blob 2db29710123e done
Copying config feb5d9fea6 done
Writing manifest to image destination
Storing signatures

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

4. Controleer de status van de containers op je systeem met het onderstaande Podman commando

podman ps -a

Je ziet de container op basis van het Docker image ‘hello-world’ met de huidige status ‘Exited’.

CONTAINER ID  IMAGE                                 COMMAND     CREATED        STATUS                    PORTS       NAMES
cea9bbfeac4d  docker.io/library/hello-world:latest  /hello      6 minutes ago  Exited (0) 6 minutes ago              recursing_shaw

Podman Basisgebruiken

In deze stap leer je het basisgebruik van Podman voor het beheren van containers en container images.

Containerafbeeldingen zoeken

1. Om container images te zoeken met Podman, gebruik je het volgende commando. In dit voorbeeld zoeken we container images met de naam‘nginx‘.

podman search nginx

Je zult een heleboel container images zien van de meerdere registries.

2. Je kunt de zoekresultaten van elk container images register beperken met de optie ‘–limit n‘.

podman search nginx --limit 3

Nu zie je van elk register 3 resultaten van container images met de naam‘nginx‘.

INDEX              NAME                                                DESCRIPTION                                      STARS       OFFICIAL    AUTOMATED
fedoraproject.org  registry.fedoraproject.org/f29/nginx                                                                 0
fedoraproject.org  registry.fedoraproject.org/f29/origin-nginx-router                                                   0
redhat.com         registry.access.redhat.com/ubi8/nginx-120           Platform for running nginx 1.20 or building ...  0
redhat.com         registry.access.redhat.com/ubi8/nginx-118           Platform for running nginx 1.18 or building ...  0
redhat.com         registry.access.redhat.com/rhscl/nginx-18-rhel7     Nginx 1.8 server and a reverse proxy server      0
centos.org         registry.centos.org/bamachrn/nginx-header                                                            0
centos.org         registry.centos.org/centos/nginx                                                                     0
centos.org         registry.centos.org/centos/nginx-110-centos7                                                         0
docker.io          docker.io/library/nginx                             Official build of Nginx.                         15839       [OK]
docker.io          docker.io/jwilder/nginx-proxy                       Automated Nginx reverse proxy for docker con...  2096                    [OK]
docker.io          docker.io/nginxinc/nginx-unprivileged               Unprivileged NGINX Dockerfiles                   54

Beheer container afbeeldingen

Podman ondersteunt OCI en Docker images formaat. In deze fase ga je container images beheren met Podman.

1. Download container image‘nginx:alpine‘ met het volgende commando.

podman pull nginx:alpine

Kies het container register dat je wilt gebruiken, druk dan op‘Enter‘ om te bevestigen. Voor dit voorbeeld zullen we het Docker register gebruiken.

? Please select an image:
    registry.fedoraproject.org/nginx:alpine
    registry.access.redhat.com/nginx:alpine
    registry.centos.org/nginx:alpine
  ? docker.io/library/nginx:alpine

Het download proces zal beginnen.

? docker.io/library/nginx:alpine
Trying to pull docker.io/library/nginx:alpine...
Getting image source signatures
Copying blob a4e156412037 done
Copying blob a2402c2da473 done
Copying blob e0bae2ade5ec done
Copying blob 97518928ae5f done
Copying blob 3f3577460f48 done
Copying blob e362c27513c3 done
Copying config b46db85084 done
Writing manifest to image destination
Storing signatures
b46db85084b80a87b94cc930a74105b74763d0175e14f5913ea5b07c312870f8

2. Als het downloaden van de container images voltooid is, controleer je de downloader images met het volgende commando.

podman images

Hieronder staat de vergelijkbare uitvoer die je krijgt.

REPOSITORY                     TAG         IMAGE ID      CREATED      SIZE
docker.io/library/nginx        alpine      b46db85084b8  3 days ago   24.7 MB
docker.io/library/hello-world  latest      feb5d9fea6a5  7 weeks ago  19.9 kB

Container uitvoeren met Podman

Na het downloaden van het container image ‘nginx:alpine’ leer je hoe je een nieuwe container kunt draaien met Podman.

1. Voer het volgende commando uit om de container op basis van image‘nginx:alpine‘ uit te voeren.

podman run -it --rm -d -p 8080:80 --name web nginx:alpine

Je krijgt de willekeurige string en het nummer van de container.

2. Verifieer dat de container op je systeem draait met het volgende commando.

podman ps

Je ziet soortgelijke uitvoer als hieronder.

podman run container

De containernaam‘web‘ is‘Up‘ en stelt de poort‘8080‘ open op de host machine.

3. Open nu je web browser en typ het IP adres van Rocky Linux in de adresbalk. Voor dit voorbeeld heeft de Rocky Linux machine het IP adres‘192.168.1.10‘.

http://192.168.1.10:8080/

Je ziet nu de standaard index.html van de container‘web‘, die gebaseerd is op het container image‘nginx:alpine‘.

podman nginx container

Containerlogs controleren met Podman

Nu leer je het Podman commando om container logs te controleren met de optie‘logs‘.

1. Om logs van de container te controleren, kun je het onderstaande Podman commando gebruiken.

podman logs web

Je krijgt gedetailleerde logs te zien van de container‘web‘.

2. Om de uitvoer van container logs te beperken, gebruik je de optie‘–tail n‘.

podman logs --tail 10 web

Hieronder staat de vergelijkbare log-uitvoer van de container‘web‘.

podman controleert logboeken

Container stoppen met Podman

1. Om de container ‘web’ te stoppen, gebruik je het onderstaande Podman commando.

podman stop web

Nu wordt de container‘web‘ gestopt.

2. Verifieer met het volgende commando.

podman ps
podman ps -a

Je zult zien dat de container ‘web’ automatisch wordt verwijderd omdat je de optie‘–rm‘ gebruikt bij het uitvoeren van de container.

podman stop container

Aangepaste volumes instellen met Podman

In deze stap leer je hoe je volumes kunt beheren met de Podman.

1. Maak een nieuwe directory ‘data’ en het aangepaste bestand ‘index.html’. Dit zal het standaard Nginx ‘index.html’ bestand op de Nginx container vervangen.

mkdir -p ~/data/
nano ~/data/inde.html

Kopieer en plak het volgende HTML script.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Welcome to Container Nginx</title>
</head>
<body>
  <h2>Hello from Nginx container - Managed with Podman</h2>
</body>
</html>

Bewaar het script en sluit af.

2. Voer vervolgens het volgende commando uit om een nieuwe container met aangepast volume te maken.

podman run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpine

Gebruik de optie‘-v data:/usr/share/nginx/html‘ om een aangepast volume voor je nieuwe container in te stellen. De map‘data‘ zal gemount worden naar de containermap‘/usr/share/nginx/html‘.

3. Controleer draaiende containers met het Podman commando hieronder.

podman ps

De nieuwe containernamen‘web‘ is‘Up‘ met het aangepaste volume.

podman aangepast volume

4. Open je webbrowser en typ het IP adres van de server met poort‘8080‘.

http://192.168.1.10:8080/

Nu zie je de aangepaste ‘index.html’ pagina zoals hieronder.

Ngix container aangepast volume podman

SSH naar draaiende container

In deze stap krijg je toegang tot de shell van de draaiende container.

1. Om in te loggen bij de draaiende container, gebruik je Podman met de ‘exec’ optie zoals hieronder.

podman exec -it web /bin/sh

2. Nadat je op de container bent ingelogd, controleer je de hostnaam van de container, het IP adres, en de routing tabel.

hostname

ip a
route -n

Typ nu ‘exit’ en druk op‘Enter‘ om uit te loggen uit de container.

Podman SSH naar container

Opschonen omgeving

In de laatste stap maak je je omgeving schoon.

1. Stop de container‘web‘ met het volgende commando.

podman stop web

2. Verwijder vervolgens alle containers met de status‘Exited‘ met het onderstaande podman commando.

podman rm $(podman ps --filter "status=exited" -q)

Nu heb je het basisgebruik van Podman voor het beheren van containers en container images voltooid.

Conclusie

Gefeliciteerd! Je hebt Podman met succes geïnstalleerd op het Rocky Linux systeem. Ook heb je het basisgebruik van Podman voor het beheren van containers en container images geleerd.

Voor de volgende stap ben je misschien geïnteresseerd in het maken van aangepaste container images gebaseerd op het Docker image formaat of de OCI container image specificatie.