Recherche de site Web

Comment gérer les conteneurs à l'aide de Podman et Skopeo dans RHEL 8


L’un des défis auxquels les développeurs étaient confrontés dans le passé consistait à faire fonctionner les applications de manière fiable sur plusieurs environnements informatiques. Souvent, les applications ne fonctionnaient pas comme prévu ou rencontraient des erreurs et échouaient complètement. Et c’est là qu’est né le concept de conteneurs.

Que sont les images de conteneurs ?

Les images Conteneur sont des fichiers statiques livrés avec un code exécutable qui s'exécute dans un environnement isolé. Une image de conteneur comprend des bibliothèques système, des dépendances et d'autres paramètres de plate-forme nécessaires à l'application pour s'exécuter dans divers environnements.

Red Hat Linux fournit un ensemble d'outils de conteneurs utiles que vous pouvez exploiter pour travailler directement avec des conteneurs Linux à l'aide de commandes Docker requises. Ceux-ci inclus:

  • Podman – Il s'agit d'un moteur de conteneur sans démon pour exécuter et gérer les conteneurs OCI en mode root ou sans racine. Podman est similaire à Docker et possède les mêmes options de commande, sauf que Docker est un démon. Vous pouvez extraire, exécuter et gérer des images de conteneurs à l'aide de podman de la même manière qu'avec Docker. Podman est livré avec de nombreuses fonctionnalités avancées, s'intègre entièrement aux systèmes et offre une prise en charge de l'espace de noms utilisateur qui inclut l'exécution de conteneurs sans avoir besoin d'un utilisateur root.
  • Skopeo : il s'agit d'un outil de ligne de commande utilisé pour copier des images de conteneurs d'un registre à un autre. Vous pouvez utiliser Skopeo pour copier des images vers et depuis un hôte particulier, ainsi que pour copier des images vers un autre registre ou environnement de conteneurs. Outre la copie d'images, vous pouvez l'utiliser pour inspecter des images provenant de divers registres et utiliser des signatures pour créer et vérifier des images.
  • Buildah : il s'agit d'un ensemble d'outils de ligne de commande utilisés pour créer et gérer des images OCI de conteneur à l'aide de fichiers Docker.

Dans cet article, nous nous concentrerons sur la gestion des conteneurs à l'aide de podman et Skopeo.

Recherche d'images de conteneur à partir d'un registre distant

La commande podman search vous permet de rechercher des images de conteneur dans les registres distants sélectionnés. La liste par défaut des registres est définie dans le fichier registries.conf situé dans le répertoire /etc/containers/.

Les registres sont définis par 3 sections.

  • [registries.search] – Cette section spécifie les registres par défaut dans lesquels podman peut rechercher des images de conteneurs. Il recherche l'image demandée dans les registres registry.access.redhat.com, registry.redhat.io et docker.io.

  • [registries.insecure]– Cette section spécifie les registres qui n'implémentent pas le cryptage TLS, c'est-à-dire les registres non sécurisés. Par défaut, aucune entrée n'est spécifiée.

  • [registries.block] – Ceci bloque ou refuse l'accès aux registres spécifiés depuis votre système local. Par défaut, aucune entrée n'est spécifiée.

En tant qu'utilisateur régulier (non root) exécutant la commande podman, vous pouvez définir votre propre fichier registries.conf sur votre répertoire personnel ($HOME/.config /containers/registries.conf) pour remplacer les paramètres à l'échelle du système.

Règles lors de la spécification des registres

Lorsque vous spécifiez les registres, gardez à l'esprit les points suivants :

  • Chaque registre doit être entouré de guillemets simples.
  • Les registres peuvent être spécifiés à l'aide d'un nom d'hôte ou d'une adresse IP.
  • Si plusieurs registres sont spécifiés, ils doivent être séparés par des virgules.
  • Si un registre utilise un port non standard – soit le port TCP 443 pour sécurisé et 80 pour non sécurisé – le numéro de port doit être spécifié à côté du nom du registre, par ex. registry.example.com:5566.

Pour rechercher dans un registre une image de conteneur à l'aide de la syntaxe :

podman search registry/container_image

Par exemple, pour rechercher une image Redis dans le registre registry.redhat.io, appelez la commande :

podman search registry.redhat.io/redis

Pour rechercher une image de conteneur MariaDB, exécutez.

podman search registry.redhat.io/mariadb

Pour obtenir une description détaillée d'une image de conteneur, utilisez l'option --no-trunc avant le nom de l'image de conteneur à partir des résultats que vous obtenez. Par exemple, nous essaierons d'obtenir une description détaillée de l'image du conteneur MariaDB comme indiqué :

podman search --no-trunc registry.redhat.io/rhel8/mariadb-103

Tirer des images de conteneurs

L’extraction ou la récupération d’images de conteneur à partir d’un registre distant nécessite que vous vous authentifiiez avant toute autre chose. Par exemple, pour récupérer l'image du conteneur MariaDB, connectez-vous d'abord au registre Redhat :

podman login

Fournissez votre nom d'utilisateur et votre mot de passe et appuyez sur « ENTER » sur votre clavier. Si tout se passe bien, vous devriez recevoir un message de confirmation indiquant que la connexion au registre a réussi.

Login Succeeded!

Maintenant, vous pouvez extraire l'image en utilisant la syntaxe indiquée :

podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

Le <registry> fait référence à l'hôte ou au registre distant qui fournit un référentiel d'images de conteneur sur le <port> TCP. Le <namespace> et le <name> spécifient collectivement une image de conteneur basée sur le <namespace> du registre. Enfin, l'option <tag> spécifie la version de l'image du conteneur. Si aucune n’est spécifiée, la balise par défaut – Latest – est utilisée.

Il est toujours recommandé d’ajouter des registres de confiance, c’est-à-dire ceux qui assurent le cryptage et ne permettent pas aux utilisateurs anonymes de créer des comptes avec des noms aléatoires.

Pour extraire l'image MariaDB, exécutez la commande :

podman pull registry.redhat.io/rhel8/mariadb-103
  • Le <registry> –registre.redhat.io
  • Le <namespace> – rhel8
  • Le <nom> – MariaDB
  • Le <tag> – 103

Pour l’extraction ultérieure d’images de conteneur, aucune autre connexion n’est requise puisque vous êtes déjà authentifié. Pour extraire une image de conteneur Redis, exécutez simplement :

podman pull registry.redhat.io/rhscl/redis-5-rhel7

Liste des images de conteneurs

Une fois que vous avez fini d'extraire les images, vous pouvez afficher les images actuellement existantes sur votre hôte en exécutant la commande podman images.

podman images

Inspection des images de conteneurs

Avant d’exécuter un conteneur, c’est toujours une bonne idée de sonder l’image et de comprendre ce qu’elle fait. La commande podman inspect imprime une mer de métadonnées sur le conteneur, telles que le système d'exploitation et l'architecture.

Pour inspecter une image, exécutez la commande podman inspect suivie de l'ID de l'image ou du référentiel.

podman inspect IMAGE ID
OR
podman inspect REPOSITORY

Dans l'exemple ci-dessous, nous inspectons le conteneur MariaDB.

podman inspect registry.redhat.io/rhel8/mariadb-103

Pour extraire des métadonnées spécifiques pour un conteneur, transmettez l'option --format suivie des métadonnées et de l'identité du conteneur (ID ou nom de l'image).

Dans l'exemple ci-dessous, nous récupérons des informations sur l'architecture et la description du conteneur de base RHEL 8 qui relève de la section « Étiquettes ».

podman inspect --format=’{{.Labels.architecture}}’ image ID
podman inspect --format=’{{.Labels.description}}’ image ID

Pour inspecter une image distante d'un autre registre, utilisez la commande skopeo inspect. Dans l'exemple ci-dessous, nous inspectons une image d'initialisation RHEL 8 hébergée sur Docker.

skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init

Marquage des images de conteneurs

Comme vous l’avez peut-être remarqué, les noms d’images sont généralement de nature générique. Par exemple, l'image Redis est étiquetée :

registry.redhat.io/rhscl/redis-5-rhel7

Le marquage des images leur donne un nom plus intuitif pour mieux comprendre ce qu'elles contiennent. À l'aide de la commande podman tag, vous pouvez créer une balise d'image qui est essentiellement un alias d'un nom d'image comprenant différentes parties.

Ceux-ci sont:

registry/username/NAME:tag

Par exemple, pour changer le nom générique de l'image Redis qui a un ID 646f2730318c , nous exécuterons la commande :

podman tag 646f2730318c myredis

Pour ajouter une balise à la fin, ajoutez deux points suivis du numéro de balise :

podman tag 646f2730318c myredis:5.0

Sans ajouter le numéro de balise, il lui sera simplement attribué l'attribut le plus récent.

Exécution d’images de conteneur

Pour exécuter un conteneur, utilisez la commande podman run. Par exemple:

podman run image_id

Pour exécuter un conteneur silencieusement en arrière-plan en tant que service démon, utilisez l'option -d comme indiqué.

podman run -d image_id

Par exemple, pour exécuter l'image redis avec l'ID 646f2730318c, nous appellerons la commande :

podman run -d 646f2730318c

Si vous exécutez un conteneur basé sur un système d'exploitation tel que l'image de base RHEL 8, vous pouvez accéder au shell à l'aide de la directive -it. L'option -i crée une session interactive tandis que l'option -t génère une session de terminal. L'option --name définit le nom du conteneur sur mybash tandis que correspond à l'identifiant de l'image ecbc6f53bba0 de l'image de base.

podman run -it --name=mybash ecbc6f53bba0

Par la suite, vous pouvez exécuter n’importe quelle commande shell. Dans l'exemple ci-dessous, nous vérifions la version du système d'exploitation de l'image du conteneur.

cat /etc/os-release

Pour quitter le conteneur, appelez simplement la commande exit.

exit

Une fois le conteneur sorti, il s’arrête automatiquement. Pour redémarrer le conteneur, utilisez la commande podman start avec l'indicateur -ai comme indiqué.

podman start -ai mybash

Encore une fois, cela vous donne accès au shell.

Liste des images de conteneur en cours d'exécution

Pour répertorier les conteneurs en cours d'exécution, utilisez la commande podman ps comme indiqué.

podman ps

Pour afficher tous les conteneurs, y compris ceux qui se sont fermés après l'exécution, utilisez la commande :

podman ps -a

Configurer les images de conteneur pour qu'elles démarrent automatiquement sous le service Systemd

Dans cette section, nous nous concentrons sur la façon dont un conteneur peut être configuré pour s'exécuter directement sur un système RHEL en tant que service systemd.

Tout d’abord, obtenez votre image préférée. Dans ce cas, nous avons extrait l'image Redis du Docker Hub :

podman pull docker.io/redis

Si SELinux est en cours d'exécution sur votre système, vous devez activer le booléen container_manage_cgroup pour exécuter des conteneurs avec systemd.

setsebool -p container_manage_cgroup on

Ensuite, exécutez l'image du conteneur en arrière-plan et attribuez-la à votre nom d'image préféré. Dans cet exemple, nous avons nommé notre image redis_server et mappé le port 6379 du conteneur vers notre hôte RHEL 8.

podman run -d --name redis_server -p 6379:6379 redis

Ensuite, nous allons créer un fichier de configuration d'unité systemd pour redis dans le répertoire /etc/systemd/system/.

vim /etc/systemd/system/redis-container.service

Collez le contenu ci-dessous dans le fichier.

[Unit]
Description=Redis container

[Service]
Restart=always
ExecStart=/usr/bin/podman start -a redis_server
ExecStop=/usr/bin/podman stop -t 2 redis_server

[Install]
WantedBy=local.target

Enregistrez et quittez le fichier.

Ensuite, configurez le conteneur pour qu'il démarre automatiquement au démarrage.

systemctl enable redis-container.service

Ensuite, démarrez le conteneur et vérifiez son état d'exécution.

systemctl start redis-container.service
systemctl status redis-container.service

Configurer le stockage persistant pour les images de conteneur

Lors de l’exécution de conteneurs, il est prudent de configurer un stockage externe persistant sur l’hôte. Cela fournit une sauvegarde au cas où le conteneur tomberait en panne ou serait supprimé accidentellement.

Pour conserver les données, nous allons mapper un répertoire situé dans l'hôte à un répertoire à l'intérieur du conteneur.

podman run --privileged -it -v /var/lib/containers/backup_storage:/mnt registry.redhat.io/ubi8/ubi /bin/bash

L'option --privileged est passée lorsque SELinux est défini sur enforcing. L'option -v spécifie le volume externe situé sur l'hôte. Le volume du conteneur ici est le répertoire /mnt.

Une fois que nous avons accédé au shell, nous allons créer un exemple de fichier testing.txt dans le répertoire /mnt comme indiqué.

echo "This tests persistent external storage" > /mnt/testing.txt

Nous allons ensuite quitter le conteneur et vérifier si le fichier existe dans le stockage externe résidant sur l'hôte

exit
cat /var/lib/containers/backup_storage/testing.txt

SortieCeci teste le stockage externe persistant.

Arrêt et retrait des conteneurs

Une fois que vous avez terminé d'exécuter votre conteneur, vous pouvez l'arrêter à l'aide de la commande podman stop suivie du container-id que vous pouvez obtenir à partir du podman ps<. commande.

podman stop container-id

Pour supprimer les conteneurs dont vous n'avez plus besoin, assurez-vous d'abord de l'arrêter, puis d'appeler la commande podman rm suivie de l'identifiant ou du nom du conteneur en option.

podman rm container-id

Pour supprimer plusieurs conteneurs à la fois en une seule commande, spécifiez les identifiants des conteneurs séparés par un espace.

podman rm container-id-1 container-id-2 container-id-3

Pour effacer tous vos conteneurs, exécutez la commande :

podman rm -a

Supprimer une image

Pour supprimer une image, assurez-vous d’abord que tous les conteneurs générés à partir des images sont arrêtés et supprimés, comme indiqué dans la sous-rubrique précédente.

Ensuite, continuez et exécutez la commande podman -rmi suivie de l'ID de l'image comme indiqué :

podman -rmi image-id

Conclusion

Ceci conclut ce chapitre sur la gestion et l'utilisation des conteneurs dans RHEL 8. Nous espérons que ce guide vous a fourni une bonne compréhension des conteneurs et de la manière dont vous pouvez interagir et les gérer sur votre système RHEL à l'aide de podman et Skopeo.