Podman et Skopeo permettent de gérer les conteneurs et les images de conteuneurs.
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
Updating Subscription Management repositories. Last metadata expiration check: 0:52:07 ago on Sun 27 Oct 2024 01:21:26 PM +00. Installed Packages Name : container-tools Version : 1 Release : 14.el9 Architecture : noarch Size : 0.0 Source : container-tools-1-14.el9.src.rpm Repository : @System From repo : rhel-9-for-x86_64-appstream-rpms Summary : A meta-package witch container tools such as podman, buildah, skopeo, etc. License : MIT Description : Latest versions of podman, buildah, skopeo, runc, conmon, CRIU, Udica, etc as well : as dependencies such as container-selinux built and tested together, and updated.
Skopeo
La commande skopeo inspect affiche les informations d’image de conteneur (versions, ports, métadonnées, paquetages inclus,…) :
La commande podman search recherche une image dans registries.conf :
$ podman search python
NAME DESCRIPTION registry.access.redhat.com/ubi7/python-38 Python 3.8 platform for building and running applications registry.redhat.io/rhel8/python-38 Platform for building and running Python 3.8 applications [...]
La commande podman pull permet de télécharger l’image :
La commande podman images permet de vérifier que l’image créée :
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/python36 1.0 b5407ffc94cb 3 minute ago 266 MB registry.access.redhat.com/ubi8/python-38 latest a33d92f90990 1 hour ago 901 MB
La commande podman inspect permet d’afficher les informations de l’image :
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c54c7ee28158 localhost/python36:1.0 /bin/bash -c slee... 5 seconds ago Created python36
La commande podman start démarre le conteneur :
$ podman start python36 python36
$ podman start <ID> python36
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c54c7ee28158 localhost/python36:1.0 /bin/bash -c slee... 6 minutes ago Up python36
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 a60f71a1dc1b997f5ef244aaed232e5de71dd1e8a2565428ccfebde73a2f9462
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c54c7ee28158 localhost/python36:1.0 /bin/bash -c slee... 36 minutes ago Up python36 a60f71a1dc1b registry.access.redhat.com/ubi8/python-38:latest sleep infinity 32 seconds ago Up 33 seconds ago python38
La commande podman exec permet d’afficher les processus en cours d’exécution dans le conteneur python36 :
$ podman exec python38 ps -ax PID TTY STAT TIME COMMAND
1 ? Ss 0:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep infinity 7 ? R 0:00 ps -ax
La commande sh -c permet d’encapsuler la commande à exécuter dans le conteneur, le caractère > peut être interprété directement par Podman et pas comme argument de l’option podman exec :
$ podman exec python38 sh -c 'ps -ax > /tmp/process-data.log'
PID TTY STAT TIME COMMAND 1 ? Ss 0:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep infinity 7 ? R 0:00 ps -ax
Comparaison de version python installée sur le système et dans les conteneurs :
$ 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
[sudo] password for aline: Updating Subscription Management repositories. Last metadata expiration check: 4:44:45 ago on Mon 28 Oct 2024 02:26:38 AM +00. [...] Is this ok [y/N]: y [...] Complete!
Création du répertoire /home/aline/.config/containers :
[...] "DESCRIPTION": "Python 3.8 available as container is a base platform for building and running various Python 3.8 applications and frameworks. [...]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a79490db60fe docker.io/library/python:latest sleep infinity 22 seconds ago Up 22 seconds python38
Examination du fichier de conteneur dans le répertoire /home/aline/python39 :
FROM registry.my.compagny.org/ubi9-beta/ubi:latest RUN echo -e '[rhel-9.0-for-x86_64-baseos-rpms]\nbaseurl = http://content.example.com/rhel9.0/x86_64/dvd/BaseOS\nenabled = true\ngpgcheck = false\nname = Red Hat Enterprise Linux 9.0 BaseOS (dvd)\n[rhel-9.0-for-x86_64-appstream-rpms]\nbaseurl = http://content.example.com/rhel9.0/x86_64/dvd/AppStream \nenabled = true\ngpgcheck = false\nname = Red Hat Enterprise Linux 9.0 Appstream (dvd)'>/etc/yum.repos.d/rhel_dvd.repo RUN yum install --disablerepo=* --enablerepo=rhel-9.0-for-x86_64-baseos-rpms --enablerepo=rhel-9.0-for-x86_64-appstream-rpms -y python3
Création de l’image de conteneur à partir du fichier de conteneurs :
Vérification que l’image de conteneur existe dans le référentiel d’images local :
[aline@SERVER01 ~]$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/python39 1.0 80e68c195925 3 minutes ago 266 MB registry.my.compagny.org/ubi8/python-38 latest 671cc3cb4298 5 days ago 901 MB registry.my.compagny.org/ubi9-beta/ubi latest fca12da1dc30 4 months ago 235 MB
Vérification que le conteneur est en cours d’exécution ;
[aline@SERVER01 ~]$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 004756b52d3d registry.my.compagny.org/ubi8/python-38:latest sleep infinity 33 minutes ago Up python38 3db4eabe9043 localhost/python39:1.0 /bin/bash -c slee... 18 minutes ago Up python39
Copie du script python /home/aline/script.py dans le répertoire /tmp des deux conteneurs :
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)