Questo tutorial spiega come iniziare con Podman nei sistemi operativi Linux. Alla fine di questo tutorial di Podman, imparerai le basi di Podman, ad esempio come cercare e scaricare immagini, creare un nuovo contenitore dall'immagine, eseguire un contenitore, rimuovere un contenitore e creare la tua immagine dal contenitore e altro ancora.
Prima di iniziare con Podman, assicurati di aver installato Podman sulla tua macchina Linux.
- Cos'è Podman e come installare Podman in Linux
Inizia con Podman
Podman fornisce un'interfaccia a riga di comando (CLI) simile a Docker motore per container. In effetti, Podman mira a sostituire il client Docker fornito da Docker.
I comandi Podman e Docker sono quasi gli stessi. Puoi semplicemente sostituire docker
con podman
nella maggior parte dei comandi della finestra mobile. Ad esempio, la docker run
il comando diventa podman run
e docker build
diventa podman build
e così via.
Puoi persino creare una docker
alias per podman
come di seguito:
$ alias docker=podman
D'ora in poi, puoi utilizzare entrambi i docker
e podman
comandi allo stesso tempo. Ad esempio, se esegui docker
ps, eseguirà automaticamente podman
comando ps. Il passaggio da Docker a Podman è diventato molto più semplice!
1. Ottenere l'aiuto di Podman
La prima cosa che probabilmente vorrai fare dopo aver installato qualsiasi applicazione è guardare nella loro sezione della guida.
Per visualizzare il manuale della guida di Podman insieme all'elenco dei sottocomandi disponibili e alle opzioni generali, eseguire:
$ podman --help
Per apprendere l'utilizzo di qualsiasi sottocomando, ad esempio attach
, fai semplicemente:
$ podman attach --help
2. Cerca immagini
Fortunatamente, le immagini create da Docker e Podman sono compatibili con lo standard OCI. In questo modo Podman può eseguire il push e il pull di immagini dai registri dei container come Docker Hub e Quay.io .
Cerchiamo le immagini Alpine Linux usando il comando:
$ podman search alpine
Come puoi vedere, Podman elenca le immagini Alpine sia dall'hub Docker che da Quay.
Quando scarichi le immagini, puoi scegliere da dove scaricarle.
Allo stesso modo, puoi cercare immagini basate su Arch Linux come di seguito:
$ podman search archlinux
Docker hub e Quay ha molte immagini di diversi tipi. Che si tratti di un'applicazione o di un sistema operativo, troverai le immagini del contenitore predefinite da questi registri.
3. Scarica immagini
Ai fini di questa guida, scaricherò Redhat 8 Universal base image (UBI).
Per scaricare l'immagine di Redhat con Podman, esegui:
$ podman pull redhat/ubi8
Ti verrà chiesto di scegliere un registro contenitori da cui scaricare. Ho scelto l'hub Docker. Vedrai una piccola freccia davanti al registro selezionato.
? Please select an image: registry.fedoraproject.org/redhat/ubi8:latest registry.access.redhat.com/redhat/ubi8:latest ▸ docker.io/redhat/ubi8:latest quay.io/redhat/ubi8:latest
L'immagine del contenitore verrà scaricata dal registro scelto.
✔ docker.io/redhat/ubi8:latest Trying to pull docker.io/redhat/ubi8:latest... Getting image source signatures Copying blob a50df8fd88fe done Copying blob 1cadda38f72d done Copying config 0ced1c7c9b done Writing manifest to image destination Storing signatures 0ced1c7c9b23d0e107c7b15d5a0017abbbcf7e64e49a4c9f9efa1b9589ca8b68
Puoi scaricare ed eseguire diversi tipi di immagini indipendentemente dal tipo di distribuzione che utilizzi. Ad esempio, puoi scaricare e utilizzare le immagini Alpine su un host Fedora e viceversa.
$ podman pull alpino
Puoi anche scaricare una versione specifica di un'immagine. Il comando seguente scarica l'immagine di Ubuntu versione 20.04:
$ podman pull ubuntu:20.04
Poiché utilizziamo Podman come utente non root, tutte le immagini del contenitore sono archiviate nella directory home dell'utente, ad esempio $HOME/.local/share/containers/storage
, invece di /var/lib/containers
.
$ ls ~/.local/share/containers/storage/ cache libpod mounts overlay overlay-containers overlay-images overlay-layers storage.lock tmp userns.lock
4. Visualizza le immagini
Per visualizzare l'elenco delle immagini scaricate localmente, eseguire:
$ immagini podman
Risultato di esempio:
REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/ubuntu 20.04 1318b700e415 7 days ago 75.2 MB docker.io/redhat/ubi8 latest 0ced1c7c9b23 13 days ago 234 MB docker.io/library/alpine latest d4ff818577bc 6 weeks ago 5.87 MB
Come puoi vedere, l'output sopra elenca il nome del repository in cui abbiamo scaricato le immagini, il tag dell'immagine, l'id dell'immagine, quando l'immagine è stata creata e la dimensione dell'immagine.
Per chi se lo stesse chiedendo, il TAG si riferisce a una particolare istantanea dell'immagine Ubuntu (ad es. 20.04 e più recenti). TAG è solo un nome aggiuntivo per un'immagine locale. L'ID IMMAGINE (Es. 1318b700e415 ) è l'identificatore univoco dell'immagine di Ubuntu.
5. Esegui contenitori
Un contenitore può essere avviato utilizzando il tag immagine o l'id immagine.
Iniziamo un nuovo contenitore con l'immagine UBI Redhat usando il suo tag:
$ podman run -it ubi8:latest
Questo comando crea un contenitore Redhat 8 usando ubi8:latest
immagine e collega il container al terminale in modo che tu possa interagire con esso.
Ecco,
-i
: Ci consente di stabilire una connessione interattiva afferrando lo standard in (STDIN) del contenitore.-t
:Assegna un nuovo Pseudo Terminale all'interno del contenitore Redhat 8.ubi8:latest
:Contenitore Redhat 8 con TAG "latest".
Dopo aver avviato il container, verrai automaticamente posizionato nella shell del container (prompt dei comandi):
Hai notato il numero 607a288c810d
nell'output sopra? È l'ID del contenitore.
Avviso: Tieni presente che L'ID contenitore e l'ID immagine Docker sono diversi .
Puoi iniziare a giocare con il tuo Container ora.
Per tornare al Terminale del tuo host senza uscire dal Container, premi CTRL+p
seguito da CTRL+q
.
Ora verrai disconnesso dal contenitore e riportato alla console della macchina host. Il contenitore sarà ancora in esecuzione in background.
Per uscire dal contenitore, digita semplicemente exit
dalla console del Container e premere il tasto INVIO:
# exit
Questo comando arresterà il contenitore in esecuzione.
Se vuoi eseguire un container con l'ID IMMAGINE, sostituisci semplicemente il TAG immagine (ubi8:latest) con l'ID immagine (0ced1c7c9b23) nel comando precedente:
$ podman run -it 0ced1c7c9b23
Questo avvierà il contenitore Redhat 8.
6. Esegui i contenitori in background
Puoi anche eseguire Containers in background distaccato.
Per eseguire un Container in modalità separata, utilizziamo -d
bandiera:
$ podman run -it -d ubi8:latest
Quando eseguiamo il contenitore in modalità separata, Podman visualizzerà l'ID del contenitore nell'output standard.
a4846b2454b1eb63e6d532b0f7ef4a05ca19f965caf9cd0d4a2ce17131a05e29
Verifichiamo i contenitori in esecuzione usando il comando:
$ podman ps
Ora il contenitore è in esecuzione in background.
Puoi allegarli come descritto nella sezione seguente.
7. Attacca e stacca dai contenitori
Come indicato nella sezione precedente, puoi staccarti in sicurezza da un Container in esecuzione premendo CTRL+p
seguito da CTRL+q
. Questo ti consentirà di tornare al Terminale dell'host.
Per collegarlo nuovamente al contenitore, trova prima l'ID contenitore in esecuzione o il suo nome utilizzando podman ps
comando:
$ podman ps
Risultato di esempio:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 607a288c810d docker.io/redhat/ubi8:latest /bin/bash 2 hours ago Up 2 hours ago cool_cannon
Qui, 607a288c810d
è l'ID del contenitore.
E poi digita semplicemente podman attach
comando seguito dall'ID contenitore come di seguito:
$ podman attach 607a288c810d
Puoi anche allegarli usando il nome del contenitore come di seguito:
$ podman attach cool_cannon
Per staccare dal Container, premi semplicemente CTRL+p
e CTRL+q
.
8. Visualizza i contenitori in esecuzione
Per trovare o elencare i contenitori in esecuzione, digita:
$ podman ps
Risultato di esempio:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e783c0202b7d docker.io/library/alpine:latest /bin/sh 37 seconds ago Up 38 seconds ago optimistic_murdock
Questo elencherà solo i contenitori in esecuzione. Se vuoi elencare sia i contenitori in esecuzione che quelli interrotti, usa -a
bandiera.
$ podman ps -a
Risultato di esempio:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56c20497cbcd docker.io/redhat/ubi8:latest /bin/bash 3 hours ago Exited (0) 3 hours ago wizardly_albattani d23672b15cff docker.io/redhat/ubi8:latest /bin/bash 3 hours ago Exited (0) 3 hours ago nifty_merkle 89b2c038e1ba docker.io/redhat/ubi8:latest /bin/bash 3 hours ago Exited (0) 2 hours ago xenodochial_euler 607a288c810d docker.io/redhat/ubi8:latest /bin/bash 2 hours ago Exited (0) About a minute ago cool_cannon e783c0202b7d docker.io/library/alpine:latest /bin/sh 43 seconds ago Up 43 seconds ago optimistic_murdock
9. Elimina automaticamente il contenitore dopo averlo chiuso
Potresti voler testare un contenitore ed eliminarlo semplicemente non appena hai finito con il contenitore. In tal caso, puoi eliminare automaticamente il contenitore dopo averlo chiuso utilizzando --rm
bandiera:
$ podman run -it --rm ubi8:latest
Una volta uscito dal Container, questo verrà automaticamente cancellato.
10. Avvia e arresta i contenitori
Come già detto, possiamo creare più contenitori usando la stessa immagine. Questo è uno dei maggiori vantaggi dei container rispetto alle macchine fisiche o virtuali.
Per creare più nuovi container, possiamo usare podman run
comando come descritto in "5. Esegui contenitori" sezione.
Per avviare (accendere) un Container esistente, facciamo semplicemente:
$ podman start <container_name>
Allo stesso modo, possiamo interrompere (spegnere) un comando in esecuzione con il comando:
$ podman stop <container_name>
Lascia che ti mostri un esempio, così capirai meglio.
Innanzitutto, trova l'elenco di tutti i contenitori:
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56c20497cbcd docker.io/redhat/ubi8:latest /bin/bash 2 days ago Exited (0) 2 days ago wizardly_albattani d23672b15cff docker.io/redhat/ubi8:latest /bin/bash 2 days ago Exited (0) 2 days ago nifty_merkle 89b2c038e1ba docker.io/redhat/ubi8:latest /bin/bash 2 days ago Exited (0) 2 days ago xenodochial_euler 607a288c810d docker.io/redhat/ubi8:latest /bin/bash 2 days ago Exited (0) 2 days ago cool_cannon e783c0202b7d docker.io/library/alpine:latest /bin/sh 2 days ago Exited (0) 2 days ago optimistic_murdock
Il nome dei Contenitori è mostrato nei NOMI sezione (ultima colonna) dell'output di cui sopra.
Inizierò il contenitore denominato wizardly_albattani
usando il comando:
$ podman start wizardly_albattani
Controlliamo se è avviato:
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56c20497cbcd docker.io/redhat/ubi8:latest /bin/bash 2 days ago Up 7 seconds ago wizardly_albattani
Sì, era attivo 7 secondi fa.
Per fermare il Container, fai semplicemente:
$ podman stop wizardly_albattani
11. Assegna un nome ai contenitori
Se osservi attentamente l'output dei comandi precedenti, Podman assegna nomi casuali ogni volta che avvii un container. Se non dai un nome ai tuoi contenitori, Podman li nominerà automaticamente per te.
Dai un'occhiata allo screenshot seguente. Ho avviato lo stesso contenitore con la stessa immagine due volte. Dopo essere uscito dal contenitore e averlo riavviato la seconda volta, ottiene un nuovo nome anche se ho utilizzato la stessa immagine.
I contenitori ottengono un nuovo nome ogni volta dopo che li chiudi e li avviamo ogni volta.
Puoi, tuttavia, assegnare un nome statico ai contenitori con --name
segnala come di seguito:
$ podman run -it -d --name ostechnix_redhat ubi8:latest
Il comando precedente creerà l'esecuzione di un nuovo contenitore in modalità separata e lo chiamerà ostechnix_redhat
.
Per visualizzare l'elenco dei contenitori in esecuzione, facciamo:
$ podman ps
Risultato di esempio:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6fa78116dcb7 docker.io/redhat/ubi8:latest /bin/bash 4 seconds ago Up 5 seconds ago ostechnix_redhat
Hai notato il nome del container? Abbiamo assegnato un nome personalizzato (ad esempio ostechnix_redhat
) al Contenitore.
12. Crea immagini personalizzate
Podman non serve solo per scaricare ed eseguire container da immagini preconfigurate. Puoi anche creare le tue immagini personalizzate da immagini esistenti.
Innanzitutto, avvia un Container esistente o eseguine uno nuovo.
Creerò un nuovo contenitore Ubuntu:
$ podman run -it 1318b700e415
Ora sei all'interno del contenitore.
[email protected]:/#
Installa, aggiorna o rimuovi qualsiasi applicazione nel contenitore.
Ai fini di questa guida, installerò il server web Apache:
[email protected]:/# apt update
[email protected]:/# apt install apache2 -y
[email protected]:/# service apache2 start
Una volta terminato, staccati dal Container e torna al terminale dell'host premendo CTRL+p
e CTRL+q
.
Tieni presente che il contenitore è ancora in esecuzione in background!
Ora, costruisci l'immagine dal contenitore esistente usando il comando:
$ podman commit b871b0fd5810 ostechnix/ubuntu_apache
Ecco,
b871b0fd5810
- ID contenitore Ubuntu.ostechnix
– Nome dell'utente che ha creato il contenitore.ubuntu_apache
– Nome dell'immagine creata dall'utente ostechnix.
Ora controlla se la nuova immagine è stata creata elencando le immagini disponibili:
$ podman images
Risultato di esempio:
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/ostechnix/ubuntu_apache latest 6c9b2fb66400 25 seconds ago 222 MB docker.io/library/ubuntu 20.04 1318b700e415 10 days ago 75.2 MB docker.io/redhat/ubi8 latest 0ced1c7c9b23 2 weeks ago 234 MB docker.io/library/alpine latest d4ff818577bc 7 weeks ago 5.87 MB
Come puoi vedere nell'output sopra, una nuova immagine chiamata ubuntu_apache
viene creato.
Iniziamo un nuovo contenitore con questa immagine:
$ podman run -it --rm --name apache_webserver -p 8080:80 localhost/ostechnix/ubuntu_apache
Qui eseguo Container con l'immagine appena creata nel passaggio precedente. Sto anche mappando la porta locale 8080
sul sistema locale per portare 80
all'interno del contenitore.
Una volta avviato il Container, assicurati che il server Web Apache sia avviato utilizzando il comando:
[email protected]:/# service apache2 start
Ora apri il browser nel tuo sistema host e vai a http://localhost:8080
per verificare se il server Web Apache è in esecuzione nel contenitore.
13. Visualizza i registri dei contenitori
Per visualizzare tutto ciò che hai fatto all'interno del tuo Container, puoi semplicemente controllare i log del Container usando il comando:
$ podman logs apache_webserver
14. Rimuovi i contenitori
Assicurati che i contenitori siano fermi:
$ podman stop ostechnix_redhat
Dopo aver arrestato il contenitore, eliminalo usando il comando:
$ podman rm ostechnix_redhat
Allo stesso modo, elimina tutti i contenitori uno per uno come mostrato sopra.
L'eliminazione di più contenitori uno per uno può essere un compito noioso se si dispone di un numero elevato di contenitori. Invece di eliminarli uno dopo l'altro, puoi eliminarli tutti in una volta. Solo stai attento! Non c'è modo di recuperare i contenitori eliminati!
Per eliminare tutti i contenitori interrotti in una volta sola, esegui:
$ podman container prune
Digita "Y"
per confermare e premere ENTER
tasto per eliminare i contenitori.
WARNING! This will remove all non running containers. Are you sure you want to continue? [y/N] y 2124a1fbc85a6be7d516e747723129bd7bb9c39d3a54951c9a81407d30ded1ab 54884f3375947026d4e87b99cb3a09e114c89120b101f5c8c1e614aca963975c 56c20497cbcdd9599c2fa729277ecf679ac29f79a0b06af3ae1a135726465ba7 607a288c810d2e605d9ba7590f8f7558ef5f96e87897a1cdde471ae9a74b36ad 69bbd87b44cb6c9a582749f4ad010b6b273e65f9fe424058fdc0bc55b188d7e4 89b2c038e1baf6ac59f0da8e43a7efedc7ba73a18ed8d704c879ffdbc7eb7f28 a4846b2454b1eb63e6d532b0f7ef4a05ca19f965caf9cd0d4a2ce17131a05e29 aa14879baf0919323730539dd949231d5bb89ca4207dd36c02a741316e6d0f18 b871b0fd5810f55e75bdd480d5fb34b09b0e293604f88896002a9368a607bf7e d23672b15cffc0a774227dc6b457a8bff5347073a112f6729d63ddf400f19dc7 e783c0202b7d7a6664e731feeff4bdb57a79df79080046ed2b728df4bce789d2 ebfd6210a6beedce43af0c41296e329d416128752ab603abd44c73117bf5dfd0
15. Rimuovi le immagini
Puoi eliminare le immagini che non sono più necessarie!
Elenca tutte le immagini scaricate con il comando:
$ podman images
Risultato di esempio:
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/ostechnix/ubuntu_apache latest 6c9b2fb66400 37 minutes ago 222 MB docker.io/library/ubuntu 20.04 1318b700e415 10 days ago 75.2 MB docker.io/redhat/ubi8 latest 0ced1c7c9b23 2 weeks ago 234 MB docker.io/library/alpine latest d4ff818577bc 7 weeks ago 5.87 MB
Ora, elimina un'immagine utilizzando il suo ID immagine o il suo nome, come di seguito:
$ podman rmi 6c9b2fb66400
Risultato di esempio:
Untagged: localhost/ostechnix/ubuntu_apache:latest Deleted: 6c9b2fb66400138738ad12643d8461fbbb859f33d3be3c35181bb9ee9b11748d
Allo stesso modo, elimina tutte le altre immagini non utilizzate,
Avviso: Non puoi eliminare un'immagine attualmente utilizzata da contenitori in esecuzione o interrotti.
Conclusione
In questo tutorial completo su Podman, abbiamo fornito 15 esempi pratici su come iniziare a utilizzare Podman in Linux. Se sei uno sviluppatore, imparare Podman è molto importante per far avanzare la tua carriera. Impara a usare Podman a fondo. Vale il tuo tempo!