Présentation
Podman est un moteur de conteneur permettant d'exécuter et de gérer des conteneurs OCI sous Linux. RedHat le développe comme une alternative directe à Docker, la célèbre plateforme de gestion de conteneurs qui a tout déclenché.
Ce didacticiel vous aidera à comprendre le fonctionnement de Podman en expliquant sa syntaxe de commande et en fournissant des exemples concrets d'utilisation des commandes Podman.
Prérequis
- Accès à une ligne de commande/fenêtre de terminal.
- Podman installé et configuré (voir Comment installer Podman sur macOS ou Comment installer Podman sur Ubuntu).
Commandes Podman
Podman a une syntaxe de commande très similaire à Docker. Le podman run
principal est suivie des commandes et options de gestion de Podman :
podman [command] [options]
Vous trouverez ci-dessous un tableau contenant toutes les commandes Podman :
Commande | Description |
---|---|
attach | Attacher à un conteneur en cours d'exécution à l'aide de son nom ou de son ID. |
auto-update | Utilisez la politique de mise à jour automatique des conteneurs pour mettre à jour les conteneurs. |
build | Utilisez les instructions de Containerfiles pour créer une image. |
commit | Créer une nouvelle image reflétant les modifications apportées à un conteneur. |
container | Gérer les conteneurs Podman. |
cp | Copier des fichiers/répertoires d'un conteneur vers le système de fichiers local et vice versa. |
create | Créer un conteneur sans le démarrer. |
diff | Afficher les modifications apportées à un conteneur ou à une image. |
events | Afficher les événements podman. |
exec | Exécuter un processus dans un conteneur en cours d'exécution. |
export | Créer une archive tar contenant le contenu du système de fichiers du conteneur. |
generate | Créer une sortie structurée basée sur un conteneur, un volume ou un pod. |
healthcheck | Gérer les vérifications de l'état des conteneurs. |
history | Afficher l'historique des images. |
image | Gérer les images. |
images | Liste des images disponibles dans le stockage local. |
import | Importer une archive d'image de système de fichiers. |
info | Afficher les informations système du podman. |
init | Initialiser les conteneurs. |
inspect | Afficher la configuration du conteneur ou de l'image. |
kill | Tuer les conteneurs. |
load | Charger une image disponible dans l'archive du conteneur. |
login | Connexion au registre des conteneurs. |
logout | Déconnectez-vous d'un registre de conteneurs. |
logs | Afficher les journaux du conteneur. |
machine | Gérer la machine virtuelle Podman. |
manifest | Créer et gérer des listes de manifestes et des index d'images. |
mount | Monter le système de fichiers racine d'un conteneur ou répertorier les conteneurs actuellement montés. |
network | Gérer les réseaux Podman. |
pause | Pause des processus de conteneur. |
play | Lire un conteneur, un volume ou un pod. |
pod | Gérer les pods Podman. |
port | Répertorier les mappages de port ou répertorier un mappage spécifique au conteneur pour le conteneur. |
ps | Répertorier les conteneurs en cours d'exécution. |
pull | Copier une image d'un registre vers un stockage local. |
push | Pousser une image d'une machine locale vers une destination spécifiée. |
rename | Renommer un conteneur. |
restart | Redémarrer un conteneur. |
rm | Supprimer un conteneur. |
rmi | Supprimer une image du stockage local. |
run | Exécuter une commande dans un conteneur. |
save | Enregistrer l'image dans un fichier local. |
search | Rechercher une image dans un registre. |
secret | Manipuler des secrets. |
start | Démarrer un conteneur. |
stats | Afficher les statistiques d'utilisation des ressources. |
stop | Arrêter un conteneur. |
system | Gérer les systèmes Podman. |
tag | Attribuer un nom à une image locale. |
top | Afficher les processus en cours d'exécution dans un conteneur. |
unmount | Démonter le système de fichiers racine d'un conteneur. |
unpause | Réactiver les processus de conteneur. |
unshare | Lancer un processus dans un nouvel espace de noms d'utilisateur. |
untag | Supprimer les balises d'une image locale. |
version | Afficher les informations de version. |
volume | Gérer les volumes de conteneurs. |
wait | Attendre qu'un conteneur s'arrête. |
Tutoriel Podman
Bien que Podman soit principalement un moteur de conteneur - il est conçu pour créer et exécuter des conteneurs OCI, les utilisateurs peuvent également utiliser podman run
commandes pour gérer les images de conteneurs.
Les sections suivantes expliquent comment utiliser Podman pour créer et manipuler des images, des conteneurs et des pods.
Afficher le manuel d'aide de Podman
Vous pouvez référencer rapidement la documentation de Podman à l'aide de la ligne de commande. Pour afficher les podman run
disponibles commandes dans votre terminal, tapez :
podman help
Pour voir le manuel complet de Podman, utilisez la commande man :
Images Podman
La création et la gestion d'images dans Podman sont effectuées avec Buildah, un outil de création d'images qui utilise une interface coreutils de niveau inférieur. Lorsqu'un utilisateur exécute un podman run
commande liée aux images, Podman appelle Buildah pour effectuer l'action.
Les sections suivantes illustrent certaines commandes importantes de gestion des images.
Recherche d'images
Rechercher dans les registres les images disponibles à l'aide de la search
commande.
podman search [search-term]
Limitez le nombre de résultats avec le --limit
option. Par exemple, pour produire trois résultats pour les "centos" terme de recherche, tapez :
podman search --limit 3 centos
Inspecter l'image
Avant d'extraire une image Podman, il est recommandé de l'inspecter. Utilisez le podman inspect
commande et le système génère des métadonnées d'image, telles que la taille du fichier, l'architecture, le système d'exploitation, etc.
podman inspect [repository or image ID]
Utilisez le --format
option avec podman inspect
commande pour obtenir des métadonnées spécifiques. Dans l'exemple ci-dessous, la commande renvoie uniquement la description de l'image :
podman inspect --format=’{{.Labels.description}}’ [image ID]
Téléchargement d'images
L'extraction d'images à partir de référentiels en ligne est effectuée à l'aide du podman pull
commande. La syntaxe est :
podman pull [registry/image]
L'exemple illustre l'extraction d'une image de fedoraproject.org registre :
Exécuter des images
Exécutez des images Podman avec podman run
:
podman run [image]
Si l'image n'est pas disponible localement, Podman l'extrait d'un registre en ligne, puis l'exécute en tant que conteneur.
Affichage des images
Les podman images
la sous-commande est utilisée pour lister les images disponibles localement :
podman images
Utilisez les options pour affiner les résultats de la recherche. Le --filter
L'option filtre la sortie en fonction des conditions que vous fournissez. Par exemple, la commande suivante recherche toutes les images contenant "redhat" au nom :
podman images --filter reference=redhat
Création d'images personnalisées
Pour créer des images personnalisées avec Podman, vous avez besoin d'un dockerfile ou d'un containerfile. Ces fichiers contiennent des instructions que l'outil Buildah utilise pour créer une image.
La construction des fichiers est effectuée avec le podman build
commande. Par exemple, pour créer une image à partir d'un répertoire contenant le script d'instruction, exécutez la commande suivante :
podman build .
Buildah rassemble le contexte de fichier nécessaire et crée une image.
Supprimer des images
Le podman rmi
La commande est utilisée pour supprimer des images du stockage local. Avant de supprimer une image Podman, assurez-vous que tous les conteneurs associés ont été arrêtés et supprimés.
Supprimer une image en utilisant le podman rmi
commande suivie du nom ou de l'ID de l'image :
podman rmi [image-name-or-id]
La sortie confirme que l'image a été supprimée.
Conteneurs Podman
La création et la gestion de conteneurs est la fonction principale de Podman. Trouvez certaines des commandes de gestion de conteneurs les plus courantes dans la section ci-dessous.
Exécuter des conteneurs
L'exécution de podman run
La commande a les mêmes fonctions que docker run. Les options qui suivent la commande dépendent du type de conteneur en cours d'exécution. L'exemple ci-dessous illustre l'exécution d'un httpd exemple, en utilisant une image disponible dans le docker.io
référentiel :
podman run -p 8080:80/tcp docker.io/library/httpd
La commande exécute le conteneur et affiche son invite de commande.
Quittez l'invite du conteneur en appuyant sur Ctrl + C . Cette commande quittera le conteneur.
Exécuter des conteneurs en arrière-plan
Pour ignorer l'invite du conteneur et exécuter le conteneur en arrière-plan, utilisez la syntaxe suivante :
podman run -dt -p 8080:80/tcp docker.io/library/httpd
Si le conteneur démarre avec succès, la sortie de la commande affiche l'ID long du conteneur.
Attacher aux conteneurs
Entrez dans le conteneur avec le podman attach
commande :
podman attach [container-name-or-id]
L'exemple montre l'attachement à un conteneur Alpine Linux en cours d'exécution à l'aide de l'ID de conteneur.
Affichage des conteneurs en cours d'exécution
Afficher les conteneurs en cours d'exécution avec le ps
commande :
podman ps
La sortie de la commande affiche une liste contenant des informations de base sur l'exécution des conteneurs.
Suppression automatique des conteneurs après la fermeture
Utilisez le --rm
option avec podman run
pour supprimer automatiquement un conteneur :
podman run --rm -dt -p 8080:80/tcp alpine:latest
Démarrage et arrêt des conteneurs
Utilisez start
et stop
commandes pour démarrer et arrêter les conteneurs existants.
podman start [container-id]
La sortie affiche l'ID du conteneur.
podman stop [container-id]
L'ID du conteneur arrêté s'affiche.
Attribuer des noms aux conteneurs
Vous pouvez nommer les conteneurs en cours d'exécution à l'aide de l'option --name
avec le podman run
commande. Par exemple, pour nommer un conteneur Alpine Linux, utilisez la commande suivante :
podman run --name AlpineTest -dt -p 8080:80/tcp alpine:latest
L'image ci-dessous montre que podman run
était un succès. Le podman ps
la commande répertorie les conteneurs Podman en cours d'exécution, et le nom est visible dans le NAMES
colonne.
Afficher les journaux des conteneurs
Afficher les logs du conteneur au moment de l'exécution avec les podman logs
commande.
podman logs [container-name-or-id]
Utilisez le -l
flag pour afficher les journaux du conteneur le plus récent.
Retirer les conteneurs
Pour supprimer un conteneur Podman, assurez-vous d'abord que le conteneur a été arrêté. Ensuite, utilisez le podman rm
commande suivie du nom ou de l'ID du conteneur.
podman rm [container-name-or-id]
L'exemple ci-dessous montre la suppression de l'AlpineTest conteneur.
Pour supprimer un conteneur en cours d'exécution ou inutilisable, ajoutez le -f option.
podman rm -f [container-name-or-id]
Pour supprimer plusieurs conteneurs en une seule fois, répertoriez les ID des conteneurs séparés par un espace :
podman rm [container-1-id container-2-id container-3-id]
Gousses Podman
Les pods sont des groupes de conteneurs qui partagent des ressources. Les pods Podman sont la fonctionnalité qui distingue Podman de Docker. Les sections suivantes illustrent certaines des opérations de pod courantes dans Podman.
Répertorier les modules
Utilisez la commande ci-dessous pour répertorier tous les pods disponibles sur le système :
podman pod ls
La liste affiche l'ID du pod, son nom, son état, l'heure de création, l'infra ID et le nombre de conteneurs qu'il contient.
Créer des pods vides
Créez un pod vide dans Podman en utilisant la syntaxe suivante :
podman pod create
La sortie affiche l'ID du pod nouvellement créé.
Ajouter des conteneurs aux pods
Pour ajouter un conteneur à un pod, utilisez le --pod
étiquette avec docker run
:
podman run [options] --pod [pod-name-or-id] [image]
Dans l'exemple ci-dessous, un conteneur Alpine Linux est attribué au pod avec l'ID e06ed089b454 :
Créer des pods avec des conteneurs
Podman peut créer un conteneur et l'ajouter à un nouveau pod en une seule podman run
commande. La syntaxe inclut le --pod
étiquette :
podman run [options] --pod new:[pod-name] [image]
L'exemple ci-dessous exécute un conteneur avec le alpine:latest
image et l'ajoute à un nouveau pod nommé AlpineTest :
Le podman pod ls
la sortie de la commande affiche le nouveau pod avec deux conteneurs.
Démarrer, arrêter et supprimer des pods
Démarrez un pod à l'aide de la commande suivante :
podman pod start [pod-name-or-id]
Pour arrêter un pod, exécutez :
podman pod stop [pod-name-or-id]
Pour supprimer un pod arrêté et son conteneur, utilisez :
podman pod rm [pod-name-or-id]
Pour arrêter et supprimer les conteneurs en cours d'exécution, puis supprimer le pod, utilisez le -f
choix :
podman pod rm -f [pod-name-or-id]
Pour supprimer plusieurs pods arrêtés avec une seule commande, répertoriez les ID de pod séparés par un espace :
podman pod rm -f [pod1-id pod2-id pod3-id]
Problèmes potentiels de Podman et comment les résoudre
Cette section répertorie certains problèmes courants de Podman et propose des solutions.
Impossible d'exposer le port privilégié
Podman permet aux utilisateurs non root d'exécuter des conteneurs. Cependant, ils sont limités à la transmission uniquement vers des ports non privilégiés. Si vous tentez de transférer vers un port privilégié en tant qu'utilisateur non root, vous recevez l'erreur suivante :
La solution à ce problème consiste à choisir un port non privilégié ou à exécuter la commande à l'aide de sudo.
Problèmes de recherche de podman
Un autre problème courant est la podman search
commande renvoyant une sortie vide.
Ce problème concerne généralement le /etc/containers/registries.conf
dossier. Ouvrez le fichier dans un éditeur de texte :
sudo nano /etc/containers/registries.conf
Faites défiler vers le bas du fichier et assurez-vous que Podman a des registres à rechercher.
Si vous n'avez aucun registre répertorié dans le fichier, vous pouvez ajouter les registres courants, tels que RedHat, Fedora et Docker, en utilisant la syntaxe suivante :
unqualified-search-registries=["registry.access.redhat.com", "registry.fedoraproject.org", "docker.io"]
Enregistrez le fichier. La podman search
La liste doit être remplie avec les résultats des registres en ligne enregistrés.
Erreur :configuration non valide fournie
Lors de l'ajout de conteneurs à un pod, le message suivant peut s'afficher :
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
Ce problème se produit lorsque vous essayez d'ajouter un conteneur avec des ports qui n'ont pas été définis lors de la création du pod. Actuellement, Podman ne le permet pas.