Accéder au contenuNavigation Accéder à la page : page précédente [raccourci clavier p] / page suivante [raccourci clavier n]
documentation.suse.com / Gestion de base des conteneurs à l'aide de Podman

Gestion de base des conteneurs à l'aide de Podman

Date de publication : 12 déc 2024
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.

Avantages de l'utilisation des conteneurs
  • 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.

Limitations des conteneurs
  • 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 :

  1. Exécutez la commande :

    > sudo transactional-update pkg install podman*
  2. 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.

Important
Important : aucun outil pour créer des images dans SLE Micro

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.

Note
Note : le registre openSUSE et Docker Hub ne sont pas activés par défaut

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
Note
Note : obtention d'images à l'aide de Cockpit

Si vous utilisez Cockpit, vous pouvez également extraire des images d'un registre dans le menu Conteneurs Podman en cliquant sur + Get new image (+ 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
Note
Note : suppression de tous les conteneurs arrêtés

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 ».

Note
Note : noms de pod par défaut

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 ».

Note
Note : seuls les nouveaux conteneurs peuvent être ajoutés à un pod

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.