Ricerca nel sito web

Come installare e utilizzare Podman per eseguire i contenitori su Rocky Linux 8


Questo tutorial esiste per queste versioni del sistema operativo

  • Rocky Linux 8.4
  • Rocky Linux 8.4

Su questa pagina

  1. Prerequisiti
  2. Installa Podman
  3. Cerca e scarica immagini contenitore
  4. Esegui i container
  5. Elenca e blocca i contenitori
  6. Avvia un contenitore arrestato
  7. Elimina contenitore
  8. Uccidi il contenitore
  9. Elimina immagine
  10. Visualizza i log del contenitore
  11. Ispezione dei contenitori
  12. Accesso alla shell del contenitore
  13. Pod
  14. Conclusione

Podman è una piattaforma di container gratuita e open source creata per sviluppare, gestire e distribuire container e pod in ambiente Linux. Redhat ha sviluppato Podman nel 2018. È un motore di containerizzazione che funziona in modo diverso rispetto a Docker. Podman non dipende da un demone per funzionare, a differenza di Docker che utilizza Docker CLI e Docker daemon. La dipendenza dal demone porta a un singolo punto di errore.

Podman è progettato secondo gli standard OCI (Open Container Initiative) che consentono a Podman di interagire direttamente con il kernel, i contenitori e le immagini. È anche più sicuro di Docker in quanto non richiede l'accesso root. Podman può essere utilizzato come sostituto immediato di Docker poiché entrambi sono conformi a OCI.

Questo articolo ti mostrerà come installare Podman e utilizzarlo per creare e gestire immagini e contenitori.

Prerequisiti

  1. A Rocky Linux based server

  2. A non-sudo user with root privileges.

  3. Ensure that the server is updated.

    $ sudo dnf update
    

Installa Podmann

Podman è incluso nel modulo container-tools, insieme a Buildah e Skopeo. È disponibile anche nel repository AppStream per Rocky Linux 8. Useremo il metodo del modulo.

Installa Podman usando il comando dnf module.

$ sudo dnf module install container-tools

Controlla la versione di Podman per vedere se è installata correttamente.

$ podman --version
podman version 3.2.3

Cerca e scarica le immagini del contenitore

Per cercare l'immagine di Nginx, utilizzare il seguente comando.

$ podman search nginx

Nell'output, vedrai il nome del registro da cui proviene l'immagine e una descrizione delle immagini.

Per scaricare l'immagine, utilizzare uno dei seguenti comandi.

$ podman pull docker.io/library/nginx

OR

$ podman pull nginx

È possibile visualizzare le immagini scaricate tramite il seguente comando.

$ podman images
REPOSITORY               TAG         IMAGE ID      CREATED     SIZE
docker.io/library/nginx  latest      f8f4ffc8092c  3 days ago  138 MB

Esegui contenitori

Utilizzare il comando seguente per eseguire un contenitore utilizzando l'immagine Nginx. Abbiamo chiamato il contenitore come webserver.

$ podman run -d --name webserver nginx 

Possiamo utilizzare la stessa immagine per lanciare un altro contenitore con un nome diverso.

$ podman run -d --name webserver2 nginx

Possiamo lanciare un numero illimitato di contenitori utilizzando la stessa immagine.

Elencare e fermare i contenitori

Per elencare tutti i contenitori in esecuzione, utilizzare il seguente comando.

$ podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS       NAMES
19b6668bc627  docker.io/library/nginx:latest  nginx -g daemon o...  31 seconds ago  Up 31 seconds ago              webserver
35a286ba5a55  docker.io/library/nginx:latest  nginx -g daemon o...  2 seconds ago   Up 3 seconds ago               webserver2

Arrestare il contenitore in esecuzione.

$ podman stop webserver
webserver

Verifica se si è fermato.

$ podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED             STATUS                 PORTS       NAMES
35a286ba5a55  docker.io/library/nginx:latest  nginx -g daemon o...  About a minute ago  Up About a minute ago              webserver2

Per elencare tutti i contenitori, compresi quelli arrestati, è necessario utilizzare il flag -a.

$ podman ps -a
CONTAINER ID  IMAGE                           COMMAND               CREATED             STATUS                     PORTS       NAMES
19b6668bc627  docker.io/library/nginx:latest  nginx -g daemon o...  2 minutes ago       Exited (0) 35 seconds ago              webserver
35a286ba5a55  docker.io/library/nginx:latest  nginx -g daemon o...  About a minute ago  Up About a minute ago                  webserver2

Avvia un contenitore arrestato

Utilizzare il seguente comando per avviare un contenitore arrestato.

$ podman start webserver
webserver

Verifica se è iniziato.

$ podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS             PORTS       NAMES
19b6668bc627  docker.io/library/nginx:latest  nginx -g daemon o...  3 minutes ago  Up 16 seconds ago              webserver
35a286ba5a55  docker.io/library/nginx:latest  nginx -g daemon o...  2 minutes ago  Up 2 minutes ago               webserver2

Elimina contenitore

Devi arrestare un contenitore prima di eliminarlo.

$ podman stop webserver2

Elimina il contenitore.

$ podman rm webserver2

Puoi eliminare un contenitore in esecuzione utilizzando il flag --force.

$ podman rm webserver2 --force
35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27

Uccidi il contenitore

Fermare e uccidere un container sono due cose diverse che alla fine ottengono la stessa cosa. La differenza è che l'arresto di un contenitore lo arresta con grazia mentre l'uccisione di un contenitore lo termina forzatamente, con conseguente perdita di dati.

Utilizzare il seguente comando per terminare il contenitore.

$ podman kill -s 9 webserver2

Il comando precedente utilizza l'opzione SIGNAL 9 (SIGKILL) per terminare il contenitore.

Per terminare tutti i contenitori, usa il flag --all o -a e per terminare solo l'ultimo contenitore, usa il --latest o flag -l.

Elimina immagine

Puoi eliminare le immagini usando il comando rmi.

$ podman rmi registry.redhat.io/rhel8/rsyslog

Puoi eliminare più immagini separandole con le virgole.

$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi

Per rimuovere tutte le immagini dal tuo sistema, usa il flag -a.

$ podman rmi -a

Visualizza i log del contenitore

Per visualizzare i log del contenitore, utilizzare il seguente comando.

$ podman logs webserver
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
......

Puoi limitare i log alle ultime 5 righe utilizzando l'opzione --tail.

$ podman logs --tail=5 webserver
2021/10/05 10:13:52 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/10/05 10:13:52 [notice] 1#1: OS: Linux 4.18.0-305.19.1.el8_4.x86_64
2021/10/05 10:13:52 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 262144:262144
2021/10/05 10:13:52 [notice] 1#1: start worker processes
2021/10/05 10:13:52 [notice] 1#1: start worker process 23

Per impostazione predefinita, non riceverai alcun timestamp sui registri. Usa il flag -t per aggiungere timestamp ai tuoi log.

$ podman logs -t webserver
2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
.....

Ispezionare i contenitori

L'ispezione di un contenitore stamperà le informazioni su un contenitore.

$ podman inspect webserver
[
    {
        "Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59",
        "Created": "2021-10-05T09:25:01.784949744Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "OciVersion": "1.0.2-dev",
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 4423,
....

Il comando predefinito stamperà un output lungo in formato JSON. Per filtrare l'output, devi usare l'opzione --format. Per scoprire quando è stato avviato il contenitore, eseguire il comando seguente.

$ podman inspect webserver --format '{{.State.StartedAt}}'
2021-10-05 10:13:52.794806322 +0000 UTC

Accesso alla shell del contenitore

Puoi accedere al prompt della shell di qualsiasi contenitore utilizzando l'opzione exec.

$ podman exec -it webserver2 /bin/bash

Baccelli

Podman ha una caratteristica unica che manca a Docker. Podman può creare pod da container che operano insieme. Ciò ti consente di gestire più contenitori in aggregato.

Per creare un pod, utilizza il seguente comando.

$ podman pod create --name mypod

Aggiungi i contenitori al pod appena creato.

$ podman run --pod mypod --name myimage1 image:latest
$ podman run --pod mypod --name myimage2 diff-image:latest

Ora puoi gestire i contenitori utilizzando semplici comandi a una riga.

$ podman kill mypod      # Kill all containers
$ podman restart mypod   # Restart all containers
$ podman stop mypod      # Stop all containers
$ podman pod ps			# List all pods
$ podman pod top mypod   # Display running processes in a pod
$ podman pod inspect mypod # Inspect a Pod
$ podman pod rm mypod    # Remove the pod

Conclusione

Questo conclude il nostro tutorial sull'installazione e l'utilizzo di Podman per eseguire i container. Ci sono molte cose che puoi fare con Podman che non abbiamo coperto. Se hai domande, pubblicale nei commenti qui sotto.