Introduzione
Podman è un motore di container per l'esecuzione e la gestione di container OCI su Linux. RedHat lo sviluppa come alternativa diretta a Docker, la famosa piattaforma di gestione dei container che ha dato il via a tutto.
Questo tutorial ti aiuterà a capire come funziona Podman spiegandone la sintassi dei comandi e fornendo esempi reali di come utilizzare i comandi Podman.
Prerequisiti
- Accesso a una riga di comando/finestra del terminale.
- Podman installato e configurato (vedi Come installare Podman su macOS o Come installare Podman su Ubuntu).
Comandi Podman
Podman ha una sintassi dei comandi molto simile a Docker. Il principale podman
comando è seguito da comandi e opzioni di gestione Podman:
podman [command] [options]
Di seguito una tabella contenente tutti i comandi Podman:
Comando | Descrizione |
---|---|
attach | Collega a un contenitore in esecuzione usando il suo nome o ID. |
auto-update | Utilizza il criterio di aggiornamento automatico dei contenitori per aggiornare i contenitori. |
build | Utilizza le istruzioni di Containerfiles per creare un'immagine. |
commit | Crea una nuova immagine che rifletta le modifiche apportate a un contenitore. |
container | Gestisci i contenitori Podman. |
cp | Copia file/directory da un container al filesystem locale e viceversa. |
build | Crea un contenitore senza avviarlo. |
diff | Visualizza le modifiche apportate a un contenitore oa un'immagine. |
events | Visualizza eventi podman. |
exec | Esegui un processo all'interno di un container in esecuzione. |
export | Crea un archivio tar contenente il contenuto del filesystem del contenitore. |
generate | Crea output strutturato basato su un contenitore, volume o pod. |
healthcheck | Gestisci i controlli dello stato del contenitore. |
history | Mostra cronologia immagini. |
image | Gestisci immagini. |
images | Elenca le immagini disponibili nella memoria locale. |
import | Importa un tarball di immagine del filesystem. |
info | Mostra informazioni sul sistema Podman. |
init | Inizializza i contenitori. |
inspect | Mostra la configurazione del contenitore o dell'immagine. |
kill | Uccidi i contenitori. |
load | Carica un'immagine disponibile nell'archivio del contenitore. |
login | Accesso al registro contenitori. |
logout | Esci da un registro contenitori. |
logs | Visualizza i log dei contenitori. |
machine | Gestisci la VM Podman. |
manifest | Crea e gestisci elenchi di manifest e indici di immagini. |
mount | Monta il filesystem root di un container o elenca i container attualmente montati. |
network | Gestisci le reti Podman. |
pause | Sospendi i processi contenitore. |
play | Riproduci un contenitore, un volume o un pod. |
pod | Gestisci i pod Podman. |
porta | Elenca le mappature delle porte o elenca una mappatura specifica del container per il container. |
ps | Elenca i contenitori in esecuzione. |
pull | Copia un'immagine da un registro nella memoria locale. |
push | Sposta un'immagine da un computer locale a una destinazione specificata. |
rename | Rinomina un contenitore. |
restart | Riavvia un contenitore. |
rm | Rimuovi un contenitore. |
rmi | Rimuovi un'immagine dalla memoria locale. |
run | Esegui un comando in un contenitore. |
save | Salva l'immagine in un file locale. |
search | Cerca un'immagine in un registro. |
secret | Manipolare i segreti. |
start | Avvia un contenitore. |
stats | Visualizza le statistiche sull'utilizzo delle risorse. |
stop | Arresta un contenitore. |
system | Gestisci i sistemi Podman. |
tag | Assegna un nome a un'immagine locale. |
top | Mostra i processi in esecuzione in un container. |
unmount | Smonta il filesystem radice di un container. |
unpause | Riattiva i processi contenitore. |
unshare | Avvia un processo in un nuovo spazio dei nomi utente. |
untag | Rimuovi i tag da un'immagine locale. |
version | Visualizza le informazioni sulla versione. |
volume | Gestisci i volumi dei contenitori. |
wait | Aspetta che un contenitore si fermi. |
Esercitazione Podman
Sebbene Podman sia principalmente un motore di container, è progettato per creare ed eseguire container OCI, gli utenti possono anche utilizzare podman
comandi per gestire le immagini del contenitore.
Le sezioni seguenti spiegano come utilizzare Podman per creare e manipolare immagini, contenitori e pod.
Visualizzazione del manuale di assistenza di Podman
Puoi fare riferimento rapidamente alla documentazione di Podman utilizzando la riga di comando. Per visualizzare il podman
disponibile comandi nel tuo terminale, digita:
podman help
Per vedere il manuale completo di Podman, usa il comando man:
Immagini Podman
La creazione e la gestione delle immagini in Podman viene eseguita con Buildah, uno strumento di creazione delle immagini che utilizza un'interfaccia coreutils di livello inferiore. Quando un utente esegue un podman
comando relativo alle immagini, Podman chiama Buildah per eseguire l'azione.
Le sezioni seguenti illustrano alcuni importanti comandi di gestione delle immagini.
Ricerca di immagini
Cerca nei registri le immagini disponibili utilizzando la search
comando.
podman search [search-term]
Limita il numero di risultati con il --limit
opzione. Ad esempio, per produrre tre risultati per i "centos" termine di ricerca, digitare:
podman search --limit 3 centos
Ispeziona immagine
Prima di estrarre un'immagine Podman, è buona norma ispezionarla. Usa il podman inspect
comando e il sistema emette i metadati dell'immagine, come la dimensione del file, l'architettura, il sistema operativo, ecc.
podman inspect [repository or image ID]
Usa il --format
opzione con il podman inspect
comando per ottenere metadati specifici. Nell'esempio seguente, il comando restituisce solo la descrizione dell'immagine:
podman inspect --format=’{{.Labels.description}}’ [image ID]
Download di immagini
L'estrazione di immagini dai repository online viene eseguita utilizzando il podman pull
comando. La sintassi è:
podman pull [registry/image]
L'esempio illustra l'estrazione di un'immagine da fedoraproject.org registro:
Esecuzione di immagini
Esegui le immagini Podman con podman run
:
podman run [image]
Se l'immagine non è disponibile localmente, Podman la estrae da un registro online e poi la esegue come contenitore.
Visualizzazione delle immagini
Le podman images
il sottocomando viene utilizzato per elencare le immagini disponibili localmente:
podman images
Utilizzare le opzioni per restringere i risultati della ricerca. Il --filter
l'opzione filtra l'output in base alle condizioni fornite. Ad esempio, il comando seguente cerca tutte le immagini contenenti "redhat" nel nome:
podman images --filter reference=redhat
Creazione di immagini personalizzate
Per creare immagini personalizzate con Podman, è necessario un file docker o un file contenitore. Questi file contengono le istruzioni che lo strumento Buildah utilizza per creare un'immagine.
La creazione dei file viene eseguita con podman build
comando. Ad esempio, per creare un'immagine da una directory contenente lo script di istruzioni, eseguire il comando seguente:
podman build .
Buildah raccoglie il contesto del file necessario e crea un'immagine.
Rimozione di immagini
Il podman rmi
Il comando viene utilizzato per rimuovere le immagini dalla memoria locale. Prima di rimuovere un'immagine Podman, assicurati che tutti i contenitori correlati siano stati fermati e rimossi.
Rimuovere un'immagine utilizzando il podman rmi
comando seguito dal nome dell'immagine o dall'ID:
podman rmi [image-name-or-id]
L'output conferma che l'immagine è stata rimossa.
Contenitori Podman
La creazione e la gestione dei container è la funzione principale di Podman. Trova alcuni dei comandi di gestione dei container più comuni nella sezione seguente.
Contenitori in esecuzione
La podman run
il comando ha le stesse funzioni di docker run. Le opzioni che seguono il comando dipendono dal tipo di contenitore in esecuzione. L'esempio seguente illustra l'esecuzione di un httpd ad esempio, utilizzando un'immagine disponibile in docker.io
deposito:
podman run -p 8080:80/tcp docker.io/library/httpd
Il comando esegue il contenitore e visualizza il relativo prompt dei comandi.
Esci dal prompt del contenitore premendo Ctrl + C . Questo comando uscirà dal contenitore.
Contenitori in esecuzione in background
Per saltare il prompt del contenitore ed eseguire il contenitore in background, utilizza la seguente sintassi:
podman run -dt -p 8080:80/tcp docker.io/library/httpd
Se il contenitore si avvia correttamente, l'output del comando visualizza l'ID lungo del contenitore.
Collegamento ai contenitori
Inserisci il contenitore con il podman attach
comando:
podman attach [container-name-or-id]
L'esempio mostra il collegamento a un container Alpine Linux in esecuzione utilizzando l'ID container.
Visualizzazione dei contenitori in esecuzione
Visualizza i container attualmente in esecuzione con ps
comando:
podman ps
L'output del comando mostra un elenco contenente informazioni di base sull'esecuzione dei container.
Eliminazione automatica dei contenitori dopo la chiusura
Usa il --rm
opzione con podman run
per eliminare automaticamente un contenitore:
podman run --rm -dt -p 8080:80/tcp alpine:latest
Avvio e arresto dei container
Usa start
e stop
comandi per avviare e interrompere i contenitori esistenti.
podman start [container-id]
L'output mostra l'ID del contenitore.
podman stop [container-id]
Viene visualizzato l'ID del container fermo.
Assegnazione di nomi ai contenitori
Puoi nominare i contenitori in esecuzione utilizzando l'opzione --name
con il podman run
comando. Ad esempio, per denominare un container Alpine Linux, utilizzare il comando seguente:
podman run --name AlpineTest -dt -p 8080:80/tcp alpine:latest
L'immagine sotto mostra che podman run
ha avuto successo. Il podman ps
gli elenchi di comandi che eseguono contenitori Podman e il nome è visibile in NAMES
colonna.
Visualizzazione dei registri dei contenitori
Visualizza i registri del contenitore al momento dell'esecuzione con i podman logs
comando.
podman logs [container-name-or-id]
Usa il -l
flag per visualizzare i log per il container più recente.
Rimozione dei contenitori
Per eliminare un contenitore Podman, assicurati innanzitutto che il contenitore sia stato arrestato. Quindi, usa il podman rm
comando seguito dal nome o dall'ID del contenitore.
podman rm [container-name-or-id]
L'esempio seguente mostra la rimozione dell'AlpineTest contenitore.
Per rimuovere un contenitore in esecuzione o inutilizzabile, aggiungi -f opzione.
podman rm -f [container-name-or-id]
Per rimuovere più contenitori in una volta sola, elenca gli ID dei contenitori separati da uno spazio:
podman rm [container-1-id container-2-id container-3-id]
Bacce Podman
I pod sono gruppi di contenitori che condividono risorse. I pod Podman sono la caratteristica che distingue Podman da Docker. Le sezioni successive illustrano alcune delle operazioni comuni del pod in Podman.
Elenco dei pod
Utilizzare il comando seguente per elencare tutti i pod disponibili nel sistema:
podman pod ls
L'elenco mostra l'ID pod, il nome, lo stato, l'ora di creazione, l'ID infra e il numero di contenitori che contiene.
Creazione di contenitori vuoti
Crea un pod vuoto in Podman usando la seguente sintassi:
podman pod create
L'output mostra l'ID del pod appena creato.
Aggiunta di contenitori ai pod
Per aggiungere un contenitore a un pod, utilizza il --pod
etichetta con docker run
:
podman run [options] --pod [pod-name-or-id] [image]
Nell'esempio seguente, al pod viene assegnato un container Alpine Linux con l'ID e06ed089b454 :
Creazione di pod con contenitori
Podman può creare un contenitore e aggiungerlo a un nuovo pod in una singola podman run
comando. La sintassi include il --pod
etichetta:
podman run [options] --pod new:[pod-name] [image]
L'esempio seguente esegue un container con alpine:latest
immagine e la aggiunge a un nuovo pod denominato AlpineTest :
Il podman pod ls
l'output del comando mostra il nuovo pod con due contenitori.
Avvio, arresto ed eliminazione dei pod
Avvia un pod usando il seguente comando:
podman pod start [pod-name-or-id]
Per fermare un pod, esegui:
podman pod stop [pod-name-or-id]
Per rimuovere un pod fermo e il suo contenitore, usa:
podman pod rm [pod-name-or-id]
Per interrompere e rimuovere i contenitori in esecuzione e quindi rimuovere il pod, utilizza il -f
opzione:
podman pod rm -f [pod-name-or-id]
Per rimuovere più pod interrotti con un comando, elenca gli ID pod separati da uno spazio:
podman pod rm -f [pod1-id pod2-id pod3-id]
Potenziali problemi di Podman e come risolverli
Questa sezione elenca alcuni problemi comuni di Podman e fornisce soluzioni.
Impossibile esporre la porta privilegiata
Podman consente agli utenti non root di eseguire container. Tuttavia, sono limitati all'inoltro solo a porte non privilegiate. Se tenti di inoltrare a una porta privilegiata come utente non root, viene visualizzato il seguente messaggio di errore:
La soluzione a questo problema è scegliere una porta non privilegiata o eseguire il comando utilizzando sudo.
Problemi di ricerca Podman
Un altro problema comune è la podman search
comando che restituisce un output vuoto.
Questo problema di solito riguarda il /etc/containers/registries.conf
file. Apri il file in un editor di testo:
sudo nano /etc/containers/registries.conf
Scorri fino alla fine del file e assicurati che Podman disponga di registri da cercare.
Se non hai registri elencati nel file, puoi aggiungere quelli comuni, come RedHat, Fedora e Docker, usando la seguente sintassi:
unqualified-search-registries=["registry.access.redhat.com", "registry.fedoraproject.org", "docker.io"]
Salva il file. La podman search
l'elenco deve essere compilato con i risultati dei registri online registrati.
Errore:configurazione fornita non valida
Quando si aggiungono contenitori a un pod, potrebbe essere visualizzato il seguente messaggio:
Error: invalid config provided: published or exposed ports must be defined when the pod is created: network cannot be configured when it is shared with a pod
Questo problema si verifica quando si tenta di aggiungere un contenitore con porte che non sono state definite durante la creazione del pod. Attualmente, Podman non lo consente.