Podman integra Buildah e Skopeo offrendo un'esperienza simile alla riga di comando Docker:consentendo agli utenti di eseguire container standalone (non orchestrati). E Podman non richiede un demone per eseguire container e pod, quindi possiamo facilmente dire addio ai grandi demoni grassi. Non ci sono demoni in background che fanno cose, e questo significa che Podman può essere integrato nei servizi di sistema tramite systemd .
In questa guida impareremo come installare Podman in Rocky Linux/Alma Linux/Centos 8. Questo post funziona anche per i derivati di RHEL 8 come Oracle Linux.
Post correlati
- Come installare e usare Podman in Debian 11
- Come installare e utilizzare Podman in Fedora 34/35
- Come installare e utilizzare Podman in OpenSUSE Leap 15.3
- Come installare e configurare la finestra mobile in Rocky Linux/Centos 8
- Introduzione a Docker Componi con esempi
- Docker come agente di compilazione:esegui le build Jenkins su Docker
Prerequisiti
Per seguire, assicurati di avere quanto segue:
- Un Rocky Linux/Centos 8 aggiornato
- Accesso root o Utente con accesso sudo
- Accesso a Internet
Indice dei contenuti
- Assicurarsi che il server sia aggiornato
- Installazione di Podman
- Esempi di riga di comando
- Esegui un contenitore persistente postgres
- Gestire i container come servizi di sistema tramite systemd e Podman
1. Garantire che il server sia aggiornato
Usa questo comando per assicurarti che i nostri pacchetti server siano aggiornati
sudo dnf update -yAssicuriamoci che i pacchetti comuni siano installati
sudo dnf install -y vim2. Installazione di Podman
Podman è disponibile nel repository AppStream predefinito per CentOS 8 e Stream. Installalo usando questo comando:
sudo dnf install -y podman
 Questo comando installerà Podman e anche le sue dipendenze: atomic-registries , runC , skopeo-containers e le politiche di SELinux.
È tutto. Ora possiamo giocare con Podman.
3. Esempi di riga di comando
Esploriamo l'esecuzione di Rocky Linux Container utilizzando podman.
Sulla finestra mobile useremmo questo comando per eseguire un container linux roccioso:
docker run -it rockylinux/rockylinux:8.4 sh
 L'operazione avrà esito negativo poiché non esiste docker comando sul mio server Rocky Linux. Possiamo sostituire docker con podman:
podman run -it rockylinux/rockylinux:8.4 shEseguiamo alcuni comandi per confermare che funzioni come previsto:
$ podman run -it rockylinux/rockylinux:8.4 sh
✔ docker.io/rockylinux/rockylinux:8.4
Trying to pull docker.io/rockylinux/rockylinux:8.4...
Getting image source signatures
Copying blob 1b474f8e669e done
Copying config 333da17614 done
Writing manifest to image destination
Storing signatures
sh-4.4# ps ax
    PID TTY      STAT   TIME COMMAND
      1 pts/0    Ss     0:00 sh
      6 pts/0    R+     0:00 ps ax
sh-4.4# exit
exit
 Per controllare lo stato del contenitore usa podman ps comando
$ podman ps -a
CONTAINER ID  IMAGE                                COMMAND     CREATED        STATUS                    PORTS       NAMES
5f81814c698e  docker.io/rockylinux/rockylinux:8.4  sh          3 minutes ago  Exited (0) 3 minutes ago              competent_pasteur
 Per eliminare il contenitore, usa podman rm :
$ podman rm 5f81814c698e
5f81814c698ef09484c66d4427fda5de21c4dca1766a67ee108d256117460d71
$ podman images
REPOSITORY                       TAG         IMAGE ID      CREATED       SIZE
docker.io/rockylinux/rockylinux  8.4         333da17614b6  4 months ago  234 MB
[[email protected] ~]$ podman image rm rockylinux/rockylinux
Untagged: docker.io/rockylinux/rockylinux:8.4
Deleted: 333da17614b642a228c30edcb2bddfdf17b2d713ae71b7930c44b714ff8b92e7Per elencare le immagini:
$ podman images
REPOSITORY                       TAG         IMAGE ID      CREATED       SIZE
docker.io/rockylinux/rockylinux  8.4         333da17614b6  4 months ago  234 MB
 Possiamo eliminare l'immagine usando l'immagine podman image rm comando:
$ podman image rm rockylinux/rockylinux
Untagged: docker.io/rockylinux/rockylinux:8.4
Deleted: 333da17614b642a228c30edcb2bddfdf17b2d713ae71b7930c44b714ff8b92e7Da quanto sopra, possiamo confermare che il comando podman utilizza la stessa sintassi della finestra mobile
Esegui un contenitore persistente Postgres
Successivamente, esploriamo come eseguire un contenitore persistente. In questo esempio, eseguiremo un container Postgres 14 e monteremo i dati postgres su un volume locale in modo che possa persistere i riavvii. Poiché i contenitori sono effimeri, i dati andranno persi se non salviamo in un volume locale.
 Estrarre docker.io/library/postgres:14.0-alpine immagine
$ podman pull docker.io/library/postgres:14.0-alpine
✔ docker.io/library/postgres:14.0-alpine
Trying to pull docker.io/library/postgres:14.0-alpine...
Getting image source signatures
Copying blob 82e9eb77798b done
Copying blob c6b2245b2f36 done
Copying blob a0d0a0d46f8b done
Copying blob 3da258773353 done
Copying blob ccd761727716 done
Copying blob 5034a66b99e6 done
Copying blob 2c7ee7bc69e8 done
Copying blob 028554d3b6cc done
Copying config 87440f4e7f done
Writing manifest to image destination
Storing signatures
87440f4e7f9e60607dc11a4f0590a1c69b3a1c075211df478e22b0c27fb263e6Conferma le immagini
$ podman images
REPOSITORY                  TAG          IMAGE ID      CREATED      SIZE
docker.io/library/postgres  14.0-alpine  87440f4e7f9e  2 weeks ago  198 MBIspeziona l'immagine con
$ podman inspect 87440f4e7f9eImpostiamo una cartella che gestirà i dati di Postgres una volta avviato il nostro contenitore:
$ mkdir -p ~/apps/postgres/dataEseguilo
podman run -d \
    -p 5432:5432 \
    -v ~/apps/postgres/data:/var/lib/postgresql/data:Z \
    -e POSTGRES_PASSWORD=Sup3rSecre7 \
    -e POSTGRES_USER=citizix_user \
    -e POSTGRES_DB=citizix_db \
    docker.io/library/postgres:14.0-alpineQuesto è il mio risultato
$ podman run -d \
>     -p 5432:5432 \
>     -v ~/apps/postgres/data:/var/lib/postgresql/data:Z \
>     -e POSTGRES_PASSWORD=Sup3rSecre7 \
>     -e POSTGRES_USER=citizix_user \
>     -e POSTGRES_DB=citizix_db \
>     docker.io/library/postgres:14.0-alpine
9aa1fb68beeeb7c68a9ea5afb4ca91bf07acf3fef92bf21249a6d8a4e43f5dbdVerifica i processi:
$ podman ps
CONTAINER ID  IMAGE                                   COMMAND     CREATED         STATUS             PORTS                   NAMES
9aa1fb68beee  docker.io/library/postgres:14.0-alpine  postgres    46 seconds ago  Up 47 seconds ago  0.0.0.0:5432->5432/tcp  gracious_jemisonConferma i log del contenitore con questo. Puoi vedere che sta inizializzando il db
$ podman logs 9aa1fb68beee | head performing post-bootstrap initialization ... sh: locale: not found 2021-11-11 09:05:00.481 UTC [30] WARNING: no usable system locales were found The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "en_US.utf8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /var/lib/postgresql/data ... ok
Connettiamoci al database ed eseguiamo alcune operazioni
$ podman exec -it 9aa1fb68beee /bin/bash
bash-5.1# psql -U citizix_user -d citizix_db;
psql (14.0)
Type "help" for help.
citizix_db=# select version();
                                                   version
--------------------------------------------------------------------------------------------------------------
 PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
(1 row)
citizix_db=#
 Quindi esploriamo l'uccisione e la rimozione del contenitore. Possiamo usare podman kill per fermare il contenitore. Questo fermerà il contenitore, ma sarà ancora lì. Usa podman ps -a  elencare. Per rimuoverlo completamente, quindi podman rm -f .
$ podman kill 9aa1fb68beee
9aa1fb68beee
$ podman ps -a
CONTAINER ID  IMAGE                                   COMMAND     CREATED         STATUS                       PORTS                   NAMES
9aa1fb68beee  docker.io/library/postgres:14.0-alpine  postgres    14 minutes ago  Exited (137) 20 seconds ago  0.0.0.0:5432->5432/tcp  gracious_jemison
$ podman rm -f 9aa1fb68beee
9aa1fb68beeeb7c68a9ea5afb4ca91bf07acf3fef92bf21249a6d8a4e43f5dbdGestione dei container come servizi di sistema tramite systemd e Podman
 Possiamo gestire i container Podman tramite systemd. Creiamo un systemd file di risorse per la gestione del container postgres che abbiamo appena creato sopra.
Crea un file podman postgres:
sudo vim /etc/systemd/system/postgres-podman.serviceAggiungi questo contenuto
[Unit]
Description=Custom Postgres Podman Container
After=network.target
[Service]
Type=simple
TimeoutStartSec=5m
ExecStartPre=-/usr/bin/podman rm -f postgrespodman
ExecStart=/usr/bin/podman run \
    -p 5432:5432 \
    -v /home/rocky/apps/postgres/data:/var/lib/postgresql/data:Z \
    -e POSTGRES_PASSWORD=Sup3rSecre7 \
    -e POSTGRES_USER=citizix_user \
    -e POSTGRES_DB=citizix_db \
    docker.io/library/postgres:14.0-alpine
ExecReload=-/usr/bin/podman stop postgrespodman
ExecReload=-/usr/bin/podman rm postgrespodman
ExecStop=-/usr/bin/podman stop postgrespodman
Restart=always
RestartSec=30
[Install]
 Quindi possiamo ricaricare il systemd catalogare e avviare il servizio:
sudo systemctl daemon-reload
sudo systemctl start postgres-podmanConferma lo stato del servizio
$ sudo systemctl status postgres-podman
● postgres-podman.service - Custom Postgres Podman Container
   Loaded: loaded (/etc/systemd/system/postgres-podman.service; static; vendor preset: disabled)
   Active: active (running) since Thu 2021-11-11 10:07:09 UTC; 21s ago
  Process: 71868 ExecStop=/usr/bin/podman stop postgrespodman (code=exited, status=125)
  Process: 71943 ExecStartPre=/usr/bin/podman rm -f postgrespodman (code=exited, status=1/FAILURE)
 Main PID: 71973 (podman)
    Tasks: 11 (limit: 23167)
   Memory: 27.8M
   CGroup: /system.slice/postgres-podman.service
           ├─71973 /usr/bin/podman run -p 5432:5432 -v /home/rocky/apps/postgres/data:/var/lib/postgresql/data:Z -e POSTGRES_PASSWORD=Sup3rSecre7 -e POSTGRES_USER=citizix_user -e POSTGRE>
           └─72073 /usr/bin/conmon --api-version 1 -c 03e82c0f88fe4d69630b308f59f2e62bb23b19021a0de5ab0b267950c9367103 -u 03e82c0f88fe4d69630b308f59f2e62bb23b19021a0de5ab0b267950c9367103>
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal systemd[1]: Starting Custom Postgres Podman Container...
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal podman[71943]: Error: no container with name or ID "postgrespodman" found: no such container
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal systemd[1]: Started Custom Postgres Podman Container.
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: PostgreSQL Database directory appears to contain a database; Skipping initialization
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.428 UTC [1] LOG:  starting PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10>
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.429 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.429 UTC [1] LOG:  listening on IPv6 address "::", port 5432
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.432 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.437 UTC [20] LOG:  database system was shut down at 2021-11-11 10:07:09 UTC
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.440 UTC [1] LOG:  database system is ready to accept connectionsAbbiamo appena impostato un servizio di sistema personalizzato basato su un container gestito tramite Podman!
Conclusione
In questa guida siamo riusciti a esplorare come installare Podman nel nostro server Rocky Linux/Centos 8.