Sviluppato da RedHat, Podman è un motore di container senza demone gratuito e open source progettato per sostituire il popolare motore di runtime Docker. Proprio come Docker, semplifica la creazione, l'esecuzione, la distribuzione e la condivisione di applicazioni utilizzando immagini di container e container OCI (Open Container Initiative). Podman utilizza gli spazi dei nomi di utenti e di rete e rispetto a Docker, Podman è considerato più isolato e sicuro. La maggior parte dei comandi in Docker funzionerà in Podman. e quindi, se hai familiarità con l'esecuzione dei comandi Docker, usare podman sarà un gioco da ragazzi.
In questa guida impariamo come installare podman su Debian 11 Occhio di bue.
Installa Podman su Debian 11
I pacchetti, le librerie e le dipendenze podman sono già ospitati nei repository Debian ufficiali. Pertanto puoi facilmente installare podman usando il gestore di pacchetti APT.
Innanzitutto, aggiorna gli elenchi dei pacchetti:
$ sudo apt update
Quindi, installa il motore del contenitore podman come segue:
$ sudo apt install podman
Quando ti viene chiesto di continuare, digita "Y" e premi INVIO.
Per verificare la versione di Podman installata, eseguire:
$ podman --version
Per raccogliere maggiori dettagli sul motore del contenitore podman, esegui il comando:
$ sudo podman info
Dovresti vedere una raffica di output che mostra dettagli complessi come quello che abbiamo di seguito.
Configura i registri Podman
Il file di registro registry.conf
è un file di configurazione che specifica i registri del contenitore da utilizzare ogni volta che si desidera eseguire il push o il pull di un'immagine. Il percorso completo del file è /etc/containers/registries.conf
. Esistono vari registri di container tra cui Docker Hub, Quay.io, RedHat e molti altri.
Puoi visualizzare il file utilizzando il tuo editor di testo come mostrato
# sudo /etc/containers/registries.conf
In Docker, l'unico registro dei contenitori è Docker Hub. Podman offre agli utenti più libertà di cercare ed estrarre immagini da qualsiasi registro. È possibile definire l'elenco dei registri contenitori aggiungendo la riga seguente.
unqualified-search-registries = [ 'registry.access.redhat.com', 'registry.redhat.io', 'docker.io']
Quando si esegue la podman search
o podman pull
comando, podman contatterà questi registri iniziando dal primo in quell'ordine. Salva le modifiche ed esci dal file.
Ricerca di immagini
Prima di estrarre le immagini del contenitore, è prudente cercare la loro disponibilità in vari registri.
Ad esempio
$ sudo podman search nginx
L'output ti presenta una vasta gamma di informazioni tra cui il nome del registro, il nome dell'immagine e una breve descrizione.
Accesso a un registro
Prima di iniziare a eseguire il pull o il push di immagini, è necessario accedere a un registro. Nell'esempio seguente, sto effettuando l'accesso al mio account Redhat che, in effetti, mi dà accesso al registro.
$ sudo podman login registry.access.redhat.com
Per disconnettersi dal registro, eseguire il comando:
$ sudo podman logout registry.access.redhat.com
Estrarre un'immagine
Per estrarre un'immagine, usa la sintassi:
$ sudo podman pull image_name
Ad esempio, per estrarre le immagini di build ufficiali di Nginx, esegui il comando:
$ sudo podman pull docker.io/library/nginx
Proviamo a tirare un'altra immagine. Estrarremo l'immagine di MongoDB ufficiale come segue.
$ sudo podman pull docker.io/library/mongo
Elencare un'immagine
Per elencare tutte le immagini, emettere il comando.
$ sudo podman images
Crea un contenitore da un'immagine
Ora che le nostre immagini risiedono sul sistema Debian, possiamo lanciare un container usando la sintassi mostrata. L'opzione -d esegue il contenitore in background e il --name
opzione specifica un nome personalizzato per il contenitore
$ sudo podman run -d --name container_name image
Ad esempio, per avviare un container in background chiamato webserv1 dall'immagine Nginx, esegui il comando:
$ sudo podman run -d --name webserv1 docker.io/library/nginx
Puoi avviare più contenitori dalla stessa immagine. Lanciamo un altro container chiamato webserv2 dalla stessa immagine Nginx.
$ sudo podman run -d --name webserv2 docker.io/library/nginx
Elencare i contenitori
In questa sezione, esamineremo vari comandi che puoi utilizzare con i contenitori.
Per controllare i container attualmente in esecuzione, impartisci il comando:
$ sudo podman ps
L'output viene presentato in colonne che forniscono informazioni quali ID contenitore, nome IMAGE, comando che esegue il contenitore, data di creazione e stato.
Per elencare tutti i contenitori inclusi quelli che sono usciti esegui:
$ sudo podman ps -a
Arresto di un container
Per fermare un contenitore, usa la sintassi
$ sudo podman stop CONTAINER_ID
O
$ sudo podman stop container_name
Nell'esempio riportato di seguito, ho interrotto il primo contenitore elencato utilizzando il relativo ID contenitore
$ sudo podman stop 9daeaabdfdfc
Puoi verificare che il contenitore sia stato arrestato utilizzando podman ps
comando. Possiamo vedere chiaramente che dopo aver interrotto l'immagine, abbiamo solo 1 immagine in esecuzione.
Il podman ps -a
comando elencherà entrambi i contenitori che comprendono il contenitore che è stato appena interrotto.
$ sudo podman ps -a
Avvio di un container
Per avviare un container usa la sintassi:
$ sudo podman start CONTAINER_ID
O
$ sudo podman start container_name
Ad esempio, per avviare webserv1, eseguire:
$ sudo podman start webserv1
Accedi alla shell di un container
L'accesso alla shell di un contenitore è meglio illustrato con un contenitore di un sistema operativo.
Qui scarichiamo o estraiamo un'immagine Ubuntu:
$ sudo podman pull docker.io/library/ubuntu
Dall'immagine creeremo o lanceremo un container e avremo accesso alla shell usando il -it
opzione.
$ sudo podman run --name ubuntu -it docker.io/library/ubuntu /bin/bash
- -i, –interactive Mantieni STDIN aperto anche se non collegato
- -t, –tty Assegna uno pseudo-TTY. L'impostazione predefinita è false
Controlla i log di un container
Per controllare i log di un container usa la sintassi:
$ sudo podman logs container_name
Ad esempio:
$ sudo podman logs webserv2
Mostra le statistiche del container
Per visualizzare le statistiche di tutti i container in esecuzione, esegui:
$ sudo podman stats
Ispeziona un contenitore
Per stampare dettagli complessi su un contenitore, usa l'opzione di ispezione:
$ sudo podman inspect webserv2
Questo stampa un output lungo in formato JSON.
Utilizzare l'opzione --format per filtrare l'output. Ad esempio per stampare l'indirizzo IP dell'esecuzione del contenitore webserv2
$ sudo podman inspect webserv2 --format '{{.NetworkSettings.IPAddress}}'
È quindi possibile eseguire ulteriori informazioni sull'IP, ad esempio utilizzando curl per recuperare le intestazioni HTTP.
$ curl -I ip-address
Eliminazione di un contenitore
Per rimuovere o eliminare completamente un contenitore, prima arrestare il contenitore, nel caso sia in esecuzione, e infine rimuoverlo. In questo esempio, abbiamo interrotto e rimosso il contenitore websev1.
$ sudo podman stop webserv1
Quindi rimuovere il contenitore fermo.
$ sudo podman rm webserv1
Rimozione di un'immagine
Per rimuovere un'immagine, assicurati innanzitutto di aver interrotto e rimosso tutti i contenitori che sono stati avviati dall'immagine. Quindi, usa rmi
opzione come mostrato.
$ sudo podman rmi image_name
Ad esempio, per rimuovere l'immagine di Ubuntu, esegui il comando:
$ sudo podman rmi docker.io/library/ubuntu
Installa Podman più recente - Compila dal sorgente
Puoi testare l'ultima versione di Podman installando la versione di sviluppo dal sorgente.
01. Crea ed esegui dipendenze
sudo apt-get install \
btrfs-progs \
git \
golang-go \
go-md2man \
iptables \
libassuan-dev \
libbtrfs-dev \
libc6-dev \
libdevmapper-dev \
libglib2.0-dev \
libgpgme-dev \
libgpg-error-dev \
libprotobuf-dev \
libprotobuf-c-dev \
libseccomp-dev \
libselinux1-dev \
libsystemd-dev \
pkg-config \
runc \
make \
libapparmor-dev \
gcc \
cmake \
uidmap \
libostree-dev
02. Installa Conmon
Il conmon è il monitor del contenitore che è un piccolo programma C il cui compito è guardare il processo principale del contenitore.
git clone https://github.com/containers/conmon
cd conmon
make
sudo make podman
sudo cp /usr/local/libexec/podman/conmon /usr/local/bin/
03. Installa runc
Per installare l'ultima versione di runc
git clone https://github.com/opencontainers/runc.git $GOPATH/src/github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
make BUILDTAGS="selinux seccomp"
sudo cp runc /usr/bin/runc
03. Installa Container Network Interface (CNI)
Il plug-in CNI viene utilizzato per inserire un'interfaccia di rete nello spazio dei nomi di rete del contenitore.
git clone https://github.com/containernetworking/plugins.git $GOPATH/src/github.com/containernetworking/plugins
cd $GOPATH/src/github.com/containernetworking/plugins
./build_linux.sh
sudo mkdir -p /usr/libexec/cni
sudo cp bin/* /usr/libexec/cni
Configura la rete
sudo mkdir -p /etc/cni/net.d
curl -qsSL https://raw.githubusercontent.com/containers/libpod/master/cni/87-podman-bridge.conflist | sudo tee /etc/cni/net.d/99-loopback.conf
Aggiungi la configurazione
sudo mkdir -p /etc/containers
sudo curl -L -o /etc/containers/registries.conf https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
sudo curl -L -o /etc/containers/policy.json https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json
04. Installa Podman dal sorgente
git clone https://github.com/containers/podman/ $GOPATH/src/github.com/containers/podman
cd $GOPATH/src/github.com/containers/podman
make
sudo make install
$ podman --version
podman version 4.0.0-dev
Conclusione
Ci auguriamo di aver fornito una solida base per il tuo viaggio per diventare un professionista migliore nell'utilizzo di podman per creare e gestire i container. Questa guida ti ha guidato attraverso l'installazione di podman su Debian 11 Buster.