Podman et Skopeo permetten de gérer les conteneurs et les images de conteu=neurs.
Utilitaires pour conteneurs
Le paquet container-tools
permet de télécharger, exécuter et comparer des conteneurs (et contient podman et skopeo) :
# dnf install container-tools |
Information sur le paquet :
$ dnf info container-tools |
Skopeo
La commande skopeo inspect
affiche les informations d’image de conteneur (versions, ports, métadonnées, paquetages inclus,…) :
$ skopeo inspect docker://registry.access.redhat.com/ubi8/python-38 |
Podman
Podman n’utilise pas de daemon pour fonctionner, il n’est pas nécessaire d’avoir un compte root pour utiliser les conteneurs.
Commandes courantes
Commandes courantes de Podman.
Commandes Podman | Description |
---|---|
podman build |
Crée une image de conteneur avec un fichier de conteneurs |
podman run |
Exécute une commande dans un nouveau conteneur |
podman images |
Liste les images du stockage local |
podman ps |
Affiche des informations des conteneurs |
podman inspect |
Affiche la config d’un conteneur, image, volume, réseau, pod |
podman pull |
Télécharge une image à partir d’un registre |
podman cp |
Copie des fichiers/répertoires entre un conteneur et le système local |
podman exec |
Exécute une commande dans un conteneur en cours d’exécution |
podman rm |
Supprime un ou plusieurs conteneurs |
podman rmi |
Supprime une ou plusieurs images stockées localement |
podman search |
Recherche une image dans un registre |
Les images
La commande podman info
affiche les informations des images :
$ podman info |
La commande podman search
recherche une image dans registries.conf
:
$ podman search python-38 |
La commande podman pull
permet de télécharger l’image :
$ podman pull registry.access.redhat.com/ubi8/python-38 |
La commande podman images
affiche les images locales :
$ podman images |
Création d’images
Il est possible de créer une image de conteneur à partir d’un fichier de conteneur.
Ce fichier de conteneur permet de créer l’image de conteneur dans le répertoire python36-app :
$ cat myContainerFile |
FROM registry.access.redhat.com/ubi8/ubi:latest
: image qui sera utiliséRUN dnf install -y python3
: installe Python3CMD ["/bin/bash", "-c", "sleep infinity"]
: exécute un sleep infini pour empêcher la fermeture du conteneur
La commande podman build
permet de compiler l’image, l’option sert -t
à indiquer le nom et la balise :
$ podman build -t NAME:TAG DIR |
NAME
: Nom de l’imageTAG
: Balise de l’image. Si lpas spécifiée, met automatiquement latestDIR
: Chemin du répertoire de travail :- le fichier de conteneur doit se trouver dans le répertoire de travail
- si c’est le répertoire courant, on utilise le “.”
- si répertoire différent du répertoire actuel : option
-f
$ podman build -t python36:1.0 . |
La commande podman images
permet de vérifier que l’image créée :
$ podman images |
La commande podman inspect
permet d’afficher les informations de l’image :
$ podman inspect localhost/python36:1.0 |
Les conteneurs
Etats des conteneurs
Un conteneur (et ses processus) peut être dans l’un des états suivants :
Created
: conteneur créé mais pas démarréRunning
: conteneur qui s’exécuteStopped
: conteneur arrêtéPaused
: conteneur en pause ( pas pris en charge pour les rootless)Deleted
: conteneur inactif (dead).
La commande podman ps
liste les conteneurs en cours d’exécution et podman ps -a
liste tous les conteneurs
Créer des conteneurs
La commande podman create
permet de créer un conteneur avec l’ID de l’image :
$ podman create --name python36 dd6ca291f097 |
$ podman ps |
$ podman ps -a |
La commande podman start
démarre le conteneur :
$ podman start python36 |
$ podman start <ID> |
$ podman ps |
Exécuter des conteneurs
La commande podman run
permet de créer et exécuter le conteneur en une seule étape, l’option -d
(detach) permet d’exécuter le conteneur en arrière-plan.
Si une commande est déjà définie dans le fichier de conteneur (sleep infinity
), il n’est pas nécessaire d’éxécuter le conteneur avec une commande mais si lancée quand même, cela empêchera la fermeture du conteneur :
$ podman run -d --name python38 registry.access.redhat.com/ubi8/python-38 sleep infinity |
$ podman ps |
La commande podman exec
permet d’afficher les processus en cours d’exécution dans le conteneur python36 :
$ podman exec python38 ps -ax |
La commande sh -c
permet d’encapsuler la commande à exécuter dans le conteneur, le caractère >
peut être interpréter directement par Podmanet pas comme argument de l’option podman exec
:
$ podman exec python38 sh -c 'ps -ax > /tmp/process-data.log' |
Comparaison de version python installée sur le système et dans les conteneurs :
$ python3 --version |
$ podman exec python36 python3 --version |
$ podman exec python38 python3 --version |
Copie de fichiers entre système et conteneurs
La commande podman cp
copie les fichiers et les répertoires entre le système et le conteneur
$ podman cp /tmp/hello.sh python38:/tmp/hello.sh |
$ podman exec python38 stat /tmp/hello.sh |
Une fois le script copié dans le conteneur, il peut y être exécuté :
$ podman exec python38 bash /tmp/hello.sh |
Suppression de conteneurs et images
Les commandes :
podman rm
: supprimer des conteneurspodman rmi
: supprimer des images
Avant de supprimer une image il faut supprimer le conteneur en cours d’éxécution :
$ podman rmi registry.access.redhat.com/ubi8/python-38 |
Arrêter le conteneur avec podman stop
:
$ podman stop python38 |
Supprimer le conteneur avec podman rm
:
$ podman rm python38 |
Supprimer l’image avec podman rmi
:
$ podman rmi registry.access.redhat.com/ubi8/python-38 |
/!\ Résumé des commandes
Commandes :
$ podman build // Crée une image de conteneur avec un fichier de conteneurs |
Fichiers :
Documentation
MAN containersregistries.conf(5)
MAN podman(1)
MAN podman-build(1)
MAN podman-cp(1)
MAN podman-exec(1)
MAN podman-images(1)
MAN podman-inspect(1)
MAN podman-ps(1)
MAN podman-pull(1)
MAN podman-rm(1)
MAN podman-rmi(1)
MAN podman-run(1)
MAN podman-search(1)
MAN podmanstop(1)