Gestion de base des conteneurs à l'aide de Podman
- CONTENU
Les conteneurs offrent une méthode de virtualisation légère pour exécuter plusieurs environnements virtuels (conteneurs) simultanément sur un hôte unique. Podman est l'outil par défaut de SLE Micro pour gérer les conteneurs.
- MOTIF
Cet article fournit des informations de base sur Podman et explique comment il peut être utilisé pour gérer les conteneurs.
- EFFORT
La lecture de l'article prend environ 30 minutes.
- OBJECTIF
Vous comprendrez comment utiliser Podman, les images de conteneurs et les conteneurs.
- CONDITIONS REQUISES
Podman installé
1 Notions de base sur les conteneurs #
Les conteneurs offrent une méthode de virtualisation légère pour exécuter plusieurs environnements virtuels (conteneurs) simultanément sur un hôte unique. Contrairement à des technologies telles que Xen ou KVM, où le processeur simule un environnement matériel complet et un hyperviseur contrôle les machines virtuelles, les conteneurs fournissent la virtualisation au niveau du système d'exploitation, alors que le kernel contrôle les conteneurs isolés.
Les conteneurs permettent d'isoler les applications dans des unités autonomes.
Les conteneurs offrent des performances quasi natives. En fonction de l'exécution, un conteneur peut utiliser le kernel hôte directement, ce qui réduit la surcharge.
Il est possible de contrôler les interfaces réseau et d'appliquer des ressources à l'intérieur de conteneurs via des groupes de contrôle de kernel.
Les conteneurs s'exécutent sur le kernel du système hôte, de sorte qu'ils ne peuvent pas utiliser différents kernels ou différentes versions de kernel.
La sécurité des conteneurs dépend du système hôte. Les applications conteneurisées peuvent être sécurisées via des profils AppArmor ou SELinux. Les conteneurs sont plus difficiles à sécuriser que les machines virtuelles en raison de la plus grande surface d'attaque.
2 À propos de Podman #
Podman est un nom abrégé pour Pod Manager Tool. Il s'agit d'un moteur de conteneur sans daemon qui vous permet d'exécuter et de déployer des applications à l'aide de conteneurs et d'images de conteneurs. Podman fournit une interface de ligne de commande pour gérer les conteneurs.
Comme Podman n'a pas de daemon, il fournit une intégration avec systemd. Cela permet de contrôler les conteneurs via des unités systemd. Vous pouvez créer ces unités pour des conteneurs existants, mais aussi générer des unités qui peuvent lancer des conteneurs s'ils n'existent pas sur le système. Podman peut exécuter systemd dans des conteneurs.
Podman vous permet d'organiser vos conteneurs en pods. Les pods partagent la même interface réseau et les mêmes ressources. Un cas d'utilisation typique pour organiser un groupe de conteneurs dans un pod est un conteneur qui exécute une base de données et un conteneur avec un client qui accède à la base de données.
2.1 Installation de Podman #
Podman est inclus par défaut dans SLE Micro. Toutefois, si Podman n'est pas présent, vous pouvez l'installer comme décrit ci-dessous :
Exécutez la commande :
>
sudo
transactional-update pkg install podman*Redémarrez votre système pour démarrer dans le nouvel instantané.
3 Obtention d'images de conteneurs #
Pour exécuter un conteneur, vous avez besoin d'une image. Une image inclut toutes les dépendances nécessaires pour exécuter une application. Vous pouvez obtenir des images à partir d'un registre d'images. Les registres disponibles sont définis dans le fichier de configuration /etc/containers/registries.conf
. Si vous disposez d'un registre d'images local ou si vous souhaitez utiliser d'autres registres, ajoutez-les dans le fichier de configuration.
SLE Micro ne fournit pas d'outils pour créer des images personnalisées. Par conséquent, la seule façon d'obtenir une image est de la récupérer à partir d'un registre d'images.
Le registre openSUSE et Docker Hub ne sont pas configurés dans l'installation par défaut. Pour télécharger des images de conteneur à partir de ces registres, vous devez ajouter ces derniers au fichier /etc/containers/registries.conf
comme suit :
unqualified-search-registries = ["registry.suse.com", "registry.opensuse.org", "docker.io"]
La commande podman pull
extrait une image d'un registre d'images. La syntaxe est la suivante :
#
podman pull[OPTIONS]SOURCE
L'élément source peut être une image sans le nom du registre. Dans ce cas, Podman tente d'extraire l'image de tous les registres configurés dans le fichier /etc/containers/registries.conf
. La balise d'image par défaut est latest
. L'emplacement par défaut des images extraites est /var/lib/containers/storage/overlay-images/
.
Pour afficher toutes les options possibles de la commande podman pull
, exécutez :
#
podman pull --help
Si vous utilisez Cockpit, vous pouvez également extraire des images d'un registre dans le menu
en cliquant sur (+ Obtenir une nouvelle image).Podman vous permet de rechercher des images dans un registre ou une liste de registres à l'aide de la commande :
#
podman searchIMAGE_NAME
Vous pouvez également utiliser l'outil skopeo pour gérer les images de conteneur et les dépôts d'images. Pour plus de détails, reportez-vous à la section suivante.
3.1 skopeo #
skopeo est un utilitaire de ligne de commande permettant de gérer, d'inspecter et de signer des images de conteneur et des dépôts d'images. skopeo vous permet d'inspecter des conteneurs et des dépôts sur des registres de conteneurs locaux et distants, et facilite également la copie d'images de conteneurs entre différentes interfaces dorsales de stockage.
skopeo fonctionne avec les types de registre suivants :
- containers-storage:IMAGE_REFERENCE
Image située dans une banque d'images locale.
- docker://IMAGE_REFERENCE
Image dans un registre.
skopeo fournit plusieurs commandes pour gérer les images et les registres :
-
inspect
La commande récupère le manifeste du dépôt et peut afficher des informations telles que les balises disponibles pour le dépôt spécifié, les étiquettes d'une image de conteneur, le système d'exploitation d'une image, etc.
La commande présente la syntaxe suivante :
>
skopeo inspect REGISTRY_TYPEIMAGE_NAME
Voici un exemple d'utilisation :
>
skopeo inspect docker://registry.suse.com/suse/pcp:latest
{ "Name": "registry.suse.com/suse/pcp", "Digest": "sha256:eee17c009fb8b05e5825a8c9658d972ab13a17541180bd7a1348fccc6e4fc77f", "RepoTags": [ "5", "5-12.54", "5-13.10", ... ], "Created": "2023-06-19T16:59:01.617731565Z", "DockerVersion": "20.10.23-ce", "Labels": { "com.suse.application.pcp.created": "2023-06-19T16:58:29.786850402Z", "com.suse.application.pcp.description": "Performance Co-Pilot (pcp) container image based on the SLE Base Container Image. This container image is not supported when using a container runtime other than podman.", ... ], "Architecture": "amd64", "Os": "linux", "Layers": [ "sha256:a05e4c4d1fc89c7f7aa60829b8631b64873df6041f627eb2b43524e9e010446e", "sha256:19793da49ce886a67aa62657dc24a105a26d63568ce27de241246bc6cc9bc008", "sha256:403f9ef6c98d4cf277caf3166ca4455817828e33c8b699237bb8eb24cb2b41bf" ], "LayersData": [ { "MIMEType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "Digest": "sha256:a05e4c4d1fc89c7f7aa60829b8631b64873df6041f627eb2b43524e9e010446e", "Size": 47291175, "Annotations": null }, ... ], "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"-
copy
La commande permet de copier des images de conteneur entre des registres, des interfaces dorsales de stockage de conteneurs et des répertoires locaux.
Voici un exemple d'utilisation :
>
skopeo copy oci:busybox_ocilayout:latest dir:existingemptydirectory
-
delete
Pour marquer une image afin de la supprimer ultérieurement à l'aide de du nettoyeur du registre.
>
skopeo delete docker://registry.example.com/example/pause:latest
-
sync
Pour synchroniser les images entre les dépôts de registre et les répertoires locaux.
4 Utilisation de conteneurs #
4.1 Exécution de conteneurs #
Après avoir extrait votre image de conteneur, vous pouvez créer des conteneurs à partir de celle-ci. Vous pouvez exécuter une instance de l'image à l'aide de la commande podman run
. La syntaxe de la commande est la suivante :
#
podman run [OPTIONS] IMAGE [CONTAINER_NAME]
IMAGE est spécifié au format transport:chemin. Si la partie transport est omise, la valeur par défaut docker
est utilisée. La partie chemin peut faire référence à un registre d'images spécifique. Si elle est omise, Podman recherche l'image dans les registres définis dans le fichier /etc/containers/registries.conf
. Voici un exemple qui exécute un conteneur appelé sles15
sur la base de l'image sle15
:
#
podman run registry.opensuse.org/suse/templates/images/sle-15-sp4/base/images/suse/sle15 sles15
Vous trouverez ci-dessous une liste des options fréquemment utilisées. Pour obtenir la liste complète des options disponibles, exécutez la commande podman run
--help
.
-
--detach, -d
Le conteneur s'exécutera en arrière-plan.
-
--env, -e=env
Cette option permet de lancer, à l'intérieur du conteneur, des variables d'environnement arbitraires disponibles pour le processus. Si une variable d'environnement est spécifiée sans valeur, Podman recherche une valeur dans l'environnement hôte et ne définit la variable que si elle est définie sur l'hôte.
-
--help
Imprime l'aide pour la commande
podman run
.--hostname=
nom,-h
Définit le nom d'hôte du conteneur disponible à l'intérieur du conteneur.
-
--pod=
nom Exécute le conteneur dans un pod existant. Pour créer un pod, commencez le nom du pod par le préfixe
new:
.-
--read-only
Monte le système de fichiers racine du conteneur en lecture seule.
-
--systemd=true|false|always
Exécute le conteneur en mode systemd. La valeur par défaut est true (vrai).
4.2 Listage des conteneurs #
Podman vous permet de lister tous les conteneurs en cours d'exécution à l'aide de la commande podman ps
. La syntaxe générique de la commande est la suivante :
#
podman ps[OPTIONS]
Les options de commande peuvent modifier les informations affichées. Par exemple, l'utilisation de l'option --all
renvoie tous les conteneurs créés par Podman (pas seulement les conteneurs en cours d'exécution).
Pour obtenir la liste complète des options podman ps
, exécutez :
#
podman ps --help
4.3 Arrêt des conteneurs #
Si la commande podman run
s'est terminée correctement, un nouveau conteneur a été démarré. Vous pouvez arrêter le conteneur en exécutant :
#
podman stop[OPTIONS]CONTAINER
Vous pouvez spécifier un nom ou un ID de conteneur unique ou une liste de conteneurs séparés par des espaces. La commande accepte les options suivantes :
-
--all, -a
Arrête tous les conteneurs en cours d'exécution.
-
--latest, -l
Au lieu de fournir un nom de conteneur, le dernier conteneur créé sera arrêté.
-
--time, -t=
secondes Secondes à attendre avant de forcer l'arrêt du conteneur.
Pour afficher toutes les options possibles de la commande podman stop
, exécutez ceci :
#
podman stop --help
4.4 Démarrage des conteneurs #
Pour démarrer des conteneurs déjà créés mais arrêtés, utilisez la commande podman start
. La syntaxe de la commande est la suivante :
#
podman start[OPTIONS]CONTAINER
CONTAINER peut correspondre à un nom ou un ID de conteneur.
Pour obtenir la liste complète des options possibles de podman
start
, exécutez la commande :
#
podman start --help
4.4.1 Validation des conteneurs modifiés #
Vous pouvez exécuter un nouveau conteneur avec des attributs spécifiques qui ne font pas partie de l'image d'origine. Pour enregistrer le conteneur avec ces attributs en tant que nouvelle image, vous pouvez utiliser la commande podman commit
:
#
podman commit[OPTIONS]CONTAINERIMAGE
CONTAINER est un nom de conteneur ou un ID de conteneur. IMAGE est le nom de la nouvelle image. Si le nom de l'image ne commence pas par un nom de registre, la valeur localhost
est utilisée.
4.5 Suppression de conteneurs #
Pour supprimer un ou plusieurs conteneurs inutilisés de l'hôte, utilisez la commande podman rm
comme suit :
#
podman rm[OPTIONS]CONTAINER
CONTAINER peut correspondre à un nom ou un ID de conteneur.
La commande ne supprime pas le conteneur spécifié s'il est en cours d'exécution. Pour supprimer un conteneur en cours d'exécution, utilisez l'option -f
.
Pour obtenir la liste complète des options podman rm
, exécutez :
#
podman rm --help
Vous pouvez supprimer tous les conteneurs arrêtés de votre hôte avec une seule commande :
#
podman container prune
Assurez-vous que chaque conteneur arrêté doit effectivement être supprimé avant d'exécuter la commande, sinon vous risquez de supprimer des conteneurs qui sont toujours utilisés et qui étaient temporairement à l'arrêt.
5 Utilisation de pods #
Les conteneurs peuvent être regroupés dans un pod. Les conteneurs du pod partagent ensuite les espaces de noms réseau, PID et IPC. Les pods peuvent être gérés par des commandes podman pod
. Cette section fournit un aperçu des commandes de gestion des pods.
5.1 Création de pods #
La commande podman pod create
permet de créer un pod. La syntaxe de la commande est la suivante :
#
podman pod create[OPTIONS]
La commande génère l'ID du pod. Par défaut, les pods sont créés sans être démarrés. Vous pouvez démarrer un pod en exécutant un conteneur dans le pod, ou en démarrant ce dernier comme décrit à la Section 5.3, « Démarrage/arrêt/redémarrage des pods ».
Si vous ne spécifiez pas de nom pour le pod avec l'option --name
, Podman lui assignera un nom par défaut.
Pour obtenir la liste complète des options possibles, exécutez la commande suivante :
#
podman pod create --help
5.2 Listage des pods #
Vous pouvez lister tous les pods en exécutant la commande :
#
podman pod list
La sortie se présente comme suit :
POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 30fba506fecb upbeat_mcclintock Created 19 hours ago 1 4324f40c9651 976a83b4d88b nervous_feynman Running 19 hours ago 2 daa5732ecd02
Comme chaque pod inclut le conteneur INFRA
, le nombre de conteneurs dans un pod est toujours supérieur à zéro.
5.3 Démarrage/arrêt/redémarrage des pods #
Une fois un pod créé, vous devez le démarrer, car par défaut, il n'est pas dans l'état running
. Dans les commandes ci-dessous, la valeur POD peut correspondre à un nom ou un ID de pod.
Pour démarrer un pod, exécutez la commande :
#
podman pod start[OPTIONS]POD
Pour obtenir la liste complète des options possibles, exécutez :
#
podman pod start --help
Pour arrêter un pod, utilisez la commande podman pod stop
comme suit :
#
podman pod stopPOD
Pour redémarrer un pod, utilisez la commande podman pod restart
comme suit :
#
podman pod restartPOD
5.4 Gestion des conteneurs dans un pod #
Pour ajouter un nouveau conteneur à un pod, utilisez la commande podman run
avec l'option --pod
. Voici une syntaxe générale de la commande :
#
podman run[OPTIONS] --pod POD_NAME IMAGE
Pour plus d'informations sur la commande podman run
, reportez-vous à la Section 4.1, « Exécution de conteneurs ».
La commande podman start
ne permet pas de démarrer un conteneur dans un pod si ce conteneur n'a pas été ajouté au pod lors de l'exécution initiale du conteneur.
Vous ne pouvez pas supprimer un conteneur d'un pod et maintenir ce conteneur en exécution, car le conteneur proprement dit est supprimé de l'hôte.
D'autres opérations telles que le démarrage, le redémarrage et l'arrêt peuvent être effectués sur certains conteneurs sans affecter l'état du pod.
5.5 Surveillance des processus dans les pods #
Pour afficher tous les conteneurs de tous les pods, utilisez la commande suivante :
#
podman ps -a --pod
La sortie de la commande sera similaire à ceci :
CONTAINER ID IMAGE COMMAND CREATED STATUS [...] 4324f40c9651 k8s.gcr.io/pause:3.2 21 hours ago Created daa5732ecd02 k8s.gcr.io/pause:3.2 22 hours ago Up 3 hours ago e5c8e360c54b localhost/test:latest /bin/bash 3 days ago Exited (137) 3 days ago 82dad15828f7 localhost/opensuse/toolbox /bin/bash 3 days ago Exited (137) 3 days ago 1a23da456b6f docker.io/i386/ubuntu /bin/bash 4 days ago Exited (0) 6 hours ago df890193f651 localhost/opensuse/toolbox /bin/bash 4 days ago Created
Les deux premiers enregistrements sont les conteneurs INFRA
de chaque pod, en fonction de l'image k8s.gcr.io/pause:3.2
. Les autres conteneurs de la sortie sont des conteneurs autonomes qui n'appartiennent à aucun pod.
5.6 Suppression de pods #
Il existe deux façons de supprimer des pods. Vous pouvez utiliser la commande podman pod
rm
pour supprimer un ou plusieurs pods. Vous pouvez également supprimer tous les pods arrêtés à l'aide de la commande podman pod prune
.
Pour supprimer un ou plusieurs pods, exécutez la commande podman pod
rm
comme suit :
#
podman pod rmPOD
La valeur POD peut correspondre à un nom ou un ID de pod.
Pour supprimer tous les pods actuellement arrêtés, utilisez la commande podman pod
prune
. Avant d'exécuter la commande podman pod prune
, assurez-vous que tous les pods arrêtés sont destinés à être supprimés, sinon vous risquez de supprimer des pods qui sont encore en cours d'utilisation.
6 Mentions légales #
Copyright © 2006–2024 SUSE LLC et contributeurs. Tous droits réservés.
Il est autorisé de copier, distribuer et/ou modifier ce document conformément aux conditions de la licence de documentation libre GNU version 1.2 ou (à votre discrétion) 1.3, avec la section permanente qu'est cette mention de copyright et la licence. Une copie de la version de licence 1.2 est incluse dans la section intitulée « Licence de documentation libre GNU ».
Pour les marques commerciales SUSE, consultez le site Web https://www.suse.com/company/legal/. Toutes les autres marques de fabricants tiers sont la propriété de leur détenteur respectif. Les symboles de marque (®, ™, etc.) désignent des marques commerciales de SUSE et de ses sociétés affiliées. Des astérisques (*) désignent des marques commerciales de fabricants tiers.
Toutes les informations de cet ouvrage ont été regroupées avec le plus grand soin. Cela ne garantit cependant pas sa complète exactitude. Ni SUSE LLC, ni les sociétés affiliées, ni les auteurs, ni les traducteurs ne peuvent être tenus responsables des erreurs possibles ou des conséquences qu'elles peuvent entraîner.