Développé par RedHat, Podman est un moteur de conteneur sans démon gratuit et open source conçu pour remplacer le moteur d'exécution populaire Docker. Tout comme Docker, il facilite la création, l'exécution, le déploiement et le partage d'applications à l'aide d'images de conteneurs et de conteneurs OCI (Open Container Initiative). Podman utilise des espaces de noms utilisateur et réseau et, par rapport à Docker, Podman est considéré comme plus isolé et sécurisé. La plupart des commandes de Docker fonctionneront dans Podman. et donc si vous êtes familiarisé avec l'exécution des commandes Docker, l'utilisation de podman sera un jeu d'enfant.
Dans ce guide, nous apprenons à installer podman sur Debian 11 Bulle.
Installer Podman sur Debian 11
Les packages, bibliothèques et dépendances podman sont déjà hébergés sur les dépôts Debian officiels. Par conséquent, vous pouvez facilement installer podman à l'aide du gestionnaire de packages APT.
Tout d'abord, mettez à jour les listes de packages :
$ sudo apt update
Ensuite, installez le moteur de conteneur podman comme suit :
$ sudo apt install podman
Lorsque vous êtes invité à continuer, tapez 'Y' et appuyez sur ENTER.
Pour vérifier la version de Podman installée, exécutez :
$ podman --version
Pour recueillir plus de détails sur le moteur de conteneur podman, exécutez la commande :
$ sudo podman info
Vous devriez voir une multitude de résultats affichant des détails complexes tels que ce que nous avons ci-dessous.
Configurer les registres Podman
Le fichier de registre registry.conf
est un fichier de configuration qui spécifie les registres de conteneurs à utiliser chaque fois que vous souhaitez envoyer ou extraire une image. Le chemin complet du fichier est /etc/containers/registries.conf
. Il existe différents registres de conteneurs, notamment Docker Hub, Quay.io, RedHat et bien d'autres.
Vous pouvez afficher le fichier à l'aide de votre éditeur de texte, comme indiqué
# sudo /etc/containers/registries.conf
Dans Docker, le seul registre de conteneurs est Docker Hub. Podman offre aux utilisateurs plus de liberté pour rechercher et extraire des images de n'importe quel registre. Vous pouvez définir la liste des registres de conteneurs en ajoutant la ligne suivante.
unqualified-search-registries = [ 'registry.access.redhat.com', 'registry.redhat.io', 'docker.io']
Lors de l'exécution de la podman search
ou podman pull
commande, podman contactera ces registres en commençant par le premier dans cet ordre. Enregistrez les modifications et quittez le fichier.
Recherche d'images
Avant d'extraire des images de conteneurs, il est prudent de rechercher leur disponibilité dans différents registres.
Par exemple
$ sudo podman search nginx
La sortie vous présente une mine d'informations, notamment le nom du registre, le nom de l'image et une brève description.
Se connecter à un registre
Avant de commencer à extraire ou à pousser des images, vous devez vous connecter à un registre. Dans l'exemple ci-dessous, je me connecte à mon compte Redhat qui, en effet, me donne accès au registre.
$ sudo podman login registry.access.redhat.com
Pour vous déconnecter du registre, exécutez la commande :
$ sudo podman logout registry.access.redhat.com
Extraire une image
Pour extraire une image, utilisez la syntaxe :
$ sudo podman pull image_name
Par exemple, pour extraire les images de build officielles de Nginx, exécutez la commande :
$ sudo podman pull docker.io/library/nginx
Essayons de tirer une autre image. Nous allons extraire l'image officielle de MongoDB comme suit.
$ sudo podman pull docker.io/library/mongo
Liste d'une image
Pour lister toutes les images, lancez la commande.
$ sudo podman images
Créer un conteneur à partir d'une image
Maintenant que nos images résident sur le système Debian, nous pouvons lancer un conteneur en utilisant la syntaxe indiquée. L'option -d exécute le conteneur en arrière-plan et le --name
l'option spécifie un nom personnalisé pour le conteneur
$ sudo podman run -d --name container_name image
Par exemple, pour lancer un conteneur en arrière-plan appelé webserv1 à partir de l'image Nginx, exécutez la commande :
$ sudo podman run -d --name webserv1 docker.io/library/nginx
Vous pouvez lancer plusieurs conteneurs à partir de la même image. Lançons un autre conteneur appelé webserv2 à partir de la même image Nginx.
$ sudo podman run -d --name webserv2 docker.io/library/nginx
Répertorier les conteneurs
Dans cette section, nous examinerons différentes commandes que vous pouvez utiliser avec des conteneurs.
Pour vérifier les conteneurs en cours d'exécution, exécutez la commande :
$ sudo podman ps
La sortie est présentée dans des colonnes qui fournissent des informations telles que l'ID du conteneur, le nom de l'IMAGE, la commande exécutant le conteneur, la date de création et l'état.
Pour répertorier tous les conteneurs, y compris ceux qui ont quitté l'exécution :
$ sudo podman ps -a
Arrêter un conteneur
Pour arrêter un conteneur, utilisez la syntaxe
$ sudo podman stop CONTAINER_ID
OU
$ sudo podman stop container_name
Dans l'exemple ci-dessous, j'ai arrêté le premier conteneur répertorié à l'aide de son ID de conteneur
$ sudo podman stop 9daeaabdfdfc
Vous pouvez vérifier que le conteneur a été arrêté en utilisant le podman ps
commande. Nous pouvons clairement voir qu'après avoir arrêté l'image, nous n'avons qu'une seule image en cours d'exécution.
Le podman ps -a
La commande listera les deux conteneurs qui comprennent le conteneur qui vient d'être arrêté.
$ sudo podman ps -a
Démarrer un conteneur
Pour démarrer un conteneur, utilisez la syntaxe :
$ sudo podman start CONTAINER_ID
OU
$ sudo podman start container_name
Par exemple, pour démarrer webserv1, exécutez :
$ sudo podman start webserv1
Accéder au shell d'un conteneur
L'accès au shell d'un conteneur est mieux démontré avec un conteneur d'un système d'exploitation.
Ici, nous allons télécharger ou extraire une image Ubuntu :
$ sudo podman pull docker.io/library/ubuntu
À partir de l'image, nous allons créer ou lancer un conteneur et accéder au shell en utilisant le -it
option.
$ sudo podman run --name ubuntu -it docker.io/library/ubuntu /bin/bash
- -i, –interactive Garde STDIN ouvert même s'il n'est pas connecté
- -t, –tty Attribue un pseudo-TTY. La valeur par défaut est false
Vérifier les journaux d'un conteneur
Pour vérifier les logs d'un conteneur utilisez la syntaxe :
$ sudo podman logs container_name
Par exemple :
$ sudo podman logs webserv2
Afficher les statistiques du conteneur
Pour afficher les statistiques de tous les conteneurs en cours d'exécution, exécutez :
$ sudo podman stats
Inspecter un conteneur
Pour imprimer des détails complexes sur un conteneur, utilisez l'option d'inspection :
$ sudo podman inspect webserv2
Cela imprime une longue sortie au format JSON.
Utilisez l'option --format pour filtrer la sortie. Par exemple pour imprimer l'adresse IP de l'exécution du conteneur webserv2
$ sudo podman inspect webserv2 --format '{{.NetworkSettings.IPAddress}}'
Vous pouvez ensuite effectuer des informations supplémentaires sur l'adresse IP, par exemple en utilisant curl pour récupérer les en-têtes HTTP.
$ curl -I ip-address
Supprimer un conteneur
Pour supprimer ou supprimer complètement un conteneur, arrêtez d'abord le conteneur, s'il est en cours d'exécution, puis supprimez-le. Dans cet exemple, nous avons arrêté et supprimé le conteneur websev1.
$ sudo podman stop webserv1
Retirez ensuite le conteneur arrêté.
$ sudo podman rm webserv1
Supprimer une image
Pour supprimer une image, assurez-vous d'abord que vous avez arrêté et supprimé tous les conteneurs qui ont été lancés à partir de l'image. Ensuite, utilisez le rmi
comme indiqué.
$ sudo podman rmi image_name
Par exemple, pour supprimer l'image ubuntu, exécutez la commande :
$ sudo podman rmi docker.io/library/ubuntu
Installer le dernier Podman - Compiler à partir des sources
Vous pouvez tester la dernière version de Podman en installant la version de développement à partir de la source.
01. Créer et exécuter des dépendances
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. Installer Conmon
Le conmon est le moniteur de conteneur qui est un petit programme C dont le travail consiste à surveiller le processus principal du conteneur.
git clone https://github.com/containers/conmon
cd conmon
make
sudo make podman
sudo cp /usr/local/libexec/podman/conmon /usr/local/bin/
03. Installer runc
Pour installer la dernière version de 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. Installer l'interface réseau de conteneurs (CNI)
Le plug-in CNI est utilisé pour insérer une interface réseau dans l'espace de noms du réseau de conteneurs.
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
Configurer le réseau
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
Ajouter la configuration
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. Installez Podman à partir de la source
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
Conclusion
Nous espérons que nous vous avons fourni une base solide pour devenir un meilleur pro dans l'utilisation de podman pour créer et gérer des conteneurs. Ce guide vous a guidé tout au long de l'installation de podman sur Debian 11 Buster.