L’un des défis auxquels les développeurs étaient confrontés par le passé consistait à faire en sorte que les applications s’exécutent de manière fiable dans 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 conteneur ?
Les images de 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’exécution de l’application dans divers environnements.
Red Hat Linux fournit un ensemble d’outils de conteneur 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 racine 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 conteneur à 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 pleinement 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 en 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 de conteneurs ou environnement. Outre la copie d’images, vous pouvez l’utiliser pour inspecter des images 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 de recherche podman 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 que podman peut rechercher pour les images de conteneur. 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] – Cela bloque ou refuse l’accès aux registres spécifiés à partir de 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 les ports 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 exemple register.example.com:5566 .
Pour rechercher une image de conteneur dans un registre à l’aide de la syntaxe :
# registre de recherche podman/container_image
Par exemple, pour rechercher une image Redis dans le registre Registry.redhat.io , appelez la commande :
# registre de recherche podman.redhat.io/redis
Pour rechercher une image de conteneur MariaDB , exécutez.
# registre de recherche podman.redhat.io/mariadb
Pour obtenir une description élaborée d’une image de conteneur, utilisez l’ --no-trunc
option 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é :
# recherche podman --no-trunc register.redhat.io/rhel8/mariadb-103
Extraction d’images de conteneurs
Pour extraire ou récupérer des images de conteneur à partir d’un registre distant, vous devez d’abord vous authentifier avant toute autre chose. Par exemple, pour récupérer l’image du conteneur MariaDB, connectez-vous d’abord au registre Redhat :
# connexion podman
Indiquez 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.
Connexion réussie !
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 conteneurs sur le TCP <port>
. Le <namespace>
et le <name>
spécifient collectivement une image de conteneur basée sur le <namespace>
au niveau du registre. Enfin, l’ <tag>
option 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 fournissent un 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 register.redhat.io/rhel8/mariadb-103
- Le
<registry>
-registry.redhat.io - Le
<namespace>
– rhel8 - Le
<name>
– MariaDB - Le
<tag>
– 103
Pour les extractions d’images de conteneur suivantes, aucune autre connexion n’est requise puisque vous êtes déjà authentifié. Pour extraire une image de conteneur Redis , exécutez simplement :
# podman pull register.redhat.io/rhscl/redis-5-rhel7
Liste des images de conteneurs
Une fois que vous avez terminé d’extraire les images, vous pouvez afficher les images existant actuellement sur votre hôte en exécutant la commande podman images.
# images de podman
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 OU # podman inspect REPOSITORY
Dans l’exemple ci-dessous, nous inspectons le conteneur MariaDB .
# podman inspecte le registre.redhat.io/rhel8/mariadb-103
Pour extraire des métadonnées spécifiques pour un conteneur, passez l’ --format
option 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 » Libellés « .
# podman inspect --format='{{.Labels.architecture}}' ID de l'image # podman inspect --format='{{.Labels.description}}' ID de l'image
Pour inspecter une image distante à partir d’un autre registre, utilisez la commande skopeo inspect . Dans l’exemple ci-dessous, nous inspectons une image init RHEL 8 hébergée sur Docker .
# skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init
Balisage 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 :
registre.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 composé de différentes parties.
Ceux-ci sont:
registre/nom d'utilisateur/NOM:tag
Par exemple, pour changer le nom générique de l’image Redis qui a pour ID 646f2730318c , nous allons exécuter la commande :
# balise podman 646f2730318c myredis
Pour ajouter une balise à la fin, ajoutez deux-points complets suivis du numéro de balise :
# balise podman 646f2730318c myredis:5.0
Sans ajouter le numéro de balise, il se verra juste attribuer l’attribut latest.
Exécution d’images de conteneur
Pour exécuter un conteneur, utilisez la commande podman run . Par exemple:
# podman lance image_id
Pour exécuter un conteneur silencieusement en arrière-plan en tant que service démon, utilisez l’ -d
option comme indiqué.
# podman run -d image_id
Par exemple, pour exécuter l’ image redis avec l’ID 646f2730318c , nous invoquerons 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 -it
directive. L’ -i
option crée une session interactive pendant qu’elle -t
génère une session de terminal. L’ --name
option définit le nom du conteneur sur mybash tandis que correspond à l’ ID d’image ecbc6f53bba0 de l’image de base.
# podman run -it --name=mybash ecbc6f53bba0
Ensuite, 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.
# chat /etc/os-release
Pour quitter le conteneur, invoquez simplement la commande exit.
# sortie
Une fois que le conteneur est sorti, il s’arrête automatiquement. Pour redémarrer le conteneur, utilisez la commande podman start-ai
avec l’ indicateur 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 ont été fermés après l’exécution, utilisez la commande :
# sous-homme ps -a
Configurer les images de conteneur pour démarrer 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 vous avez SELinux 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 sur
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 à 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=Conteneur Redis [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 activer 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 vers un répertoire à l’intérieur du conteneur.
$podman run --privileged -it -v /var/lib/containers/backup_storage:/month register.redhat.io/ubi8/ubi /bin/bash
L’ --privileged
option est transmise lorsque SELinux est défini sur l’application. L’ -v
option spécifie le volume externe qui se trouve 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 "Ceci teste le stockage externe persistant" > /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
# sortie # cat /var/lib/containers/backup_storage/testing.txt
Sortie ⇒ Ceci 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 de l’ identifiant du conteneur que vous pouvez obtenir à partir de la commande podman ps .
# ID du conteneur d'arrêt du podman
Pour supprimer les conteneurs dont vous n’avez plus besoin, assurez-vous d’abord de l’arrêter, puis appelez la commande podman rm suivie de l’ID ou du nom du conteneur en option.
# ID de conteneur podman rm
Pour supprimer plusieurs conteneurs à la fois en une seule commande, spécifiez les ID de conteneur séparés par un espace.
# podman rm conteneur-id-1 conteneur-id-2 conteneur-id-3
Pour effacer tous vos conteneurs, exécutez la commande :
# sous-homme rm -a
Suppression d’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 -rmi
commande podman suivie de l’ID de l’image comme indiqué :
# podman -rmi id-image
Conclusion
Ceci conclut ce chapitre sur la gestion et l’utilisation des conteneurs dans RHEL 8 . Nous espérons que ce guide 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 .