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
- Prerequisiti
- Installa Podman
- Cerca e scarica immagini contenitore
- Esegui i container
- Elenca e blocca i contenitori
- Avvia un contenitore arrestato
- Elimina contenitore
- Uccidi il contenitore
- Elimina immagine
- Visualizza i log del contenitore
- Ispezione dei contenitori
- Accesso alla shell del contenitore
- Pod
- 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
-
A Rocky Linux based server
-
A non-sudo user with root privileges.
-
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.