Comment démarrer automatiquement les conteneurs Podman ?

Podman est de loin l’un de mes outils préférés pour la gestion des conteneurs. Il possède une architecture sans démon qui permet à un utilisateur non privilégié d’exécuter des conteneurs sans accès root, améliorant encore la sécurité du système.

Cela ne signifie pas que Podman est parfait, sans problèmes. L’une de ces douleurs dans le cou est sa politique de redémarrage. Les conteneurs ne redémarreront pas automatiquement après le redémarrage de votre serveur .

Le problème : politique de redémarrage du conteneur

Si vous consultez la page de manuel de podman-run, vous remarquerez que l’ --restartoption ne redémarrera pas le(s) conteneur(s) au redémarrage du système.

Il dit : ” Veuillez noter que --restartcela ne redémarrera pas les conteneurs après un redémarrage du système “.

C’est différent de ce à quoi vous pourriez être habitué – avec Docker. La raison du comportement est l’architecture sans démon de Podman.

Les conteneurs gérés par Docker respectent cela à chaque redémarrage car le démon Docker démarre au démarrage et démarre les conteneurs spécifiés.

Mais, étant sans démon, Podman ne démarre pas au démarrage, donc les conteneurs ne démarrent pas non plus au démarrage.

La solution : systemd

Aimez-le ou détestez-le, la distribution de votre choix utilise probablement systemd comme système d’initialisation. Mieux vaut en faire bon usage ! 🙂

Étape 1 : Mettre le conteneur en service

Il peut y avoir plusieurs façons de démarrer un conteneur. Peut-être que vous voulez un conteneur simple et que vous utilisez la podman runcommande. Vous pouvez utiliser un fichier docker si vous avez une configuration complexe.

À des fins de démonstration, je vais créer un conteneur basé sur l’ mariadbimage du conteneur et nommer mon conteneur chitragupta-db.

$ podman ps
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS             PORTS       NAMES
422eed872347  docker.io/library/mariadb:latest  --transaction-iso...  58 seconds ago  Up 58 seconds ago              chitragupta-db

Maintenant qu’un conteneur est en cours d’exécution, je vais passer à l’étape suivante.

READ  La nouvelle distribution Linux UbuntuDDE apporte le magnifique bureau Deepin à Ubuntu

Étape 2 : Créer un service systemd

Comme je l’ai mentionné plus tôt, Podman est un logiciel de gestion de conteneurs sans démon. Par conséquent, le démarrage des conteneurs gérés par podman doit être géré en externe.

Je vais démontrer exactement cela, en utilisant systemd.

systemd est un système init qui gère les services/démons sur les systèmes d’exploitation basés sur Linux. Par conséquent, c’est le candidat idéal pour résoudre notre problème.

Étape 2A : Créer un fichier d’unité systemd

Le fichier d’unité systemd de votre conteneur n’a pas besoin d’être créé manuellement. Il existe une commande pratique pour cela. Cette commande est podman generate systemdet la syntaxe est la suivante :

podman generate systemd --name CONTAINER_NAME

Pour générer un fichier d’unité systemd pour votre conteneur, utilisez la podman generate systemdcommande avec le nom de votre conteneur.

Dans mon cas, j’ai nommé mon conteneur chitragupta-db, donc je vais l’utiliser.

sortie de l'exécution de la commande `podman generate systemd` pour mon conteneur

Comme vous pouvez le voir, cette commande podman particulière a fait tout le travail pour nous. Mais ce n’est pas particulièrement utile… pour le moment.

La sortie de podman generate systemdcorrespond à ce que vous devriez avoir dans votre fichier d’unité pour votre service. Mais pourquoi copier coller ? La commande podman est également fournie avec une option pratique, qui est l’option --files(ou -fen abrégé).

L’utilisation de l’ --filesoption remplira un fichier avec le contenu nécessaire au lieu de l’imprimer sur votre console/terminal. L’utilisation de cette option créera un fichier nommé container-CONTAINER_NAME.servicedans votre répertoire de travail actuel.

$ podman generate systemd --name chitragupta-db -f
/home/pratham/container-chitragupta-db.service

$ ls *.service
container-chitragupta-db.service

Dans mon cas, le nom de mon conteneur est chitragupta-db, il a créé un fichier nommé container-chitragupta-db.servicedans mon répertoire de travail actuel.

READ  Comment utiliser de la commande rmdir pour supprimer des répertoires

Étant donné que la podman generate systemdcommande crée un fichier d’unité systemd, vous pouvez également utiliser les options --after=--requires=--wants=pour spécifier les dépendances respectives de votre ou vos conteneurs.

Étape 2B : Utiliser le bon emplacement

Comme vous l’avez peut-être remarqué, la commande podman spécifiée créera un nouveau fichier d’unité systemd dans votre répertoire de travail actuel. Mais, comme le conteneur (du moins dans mon cas d’utilisation) est sans racine, il doit être exécuté en tant qu’utilisateur normal, au lieu de root.

Pour que cela se produise, le fichier d’unité systemd généré doit être placé dans le ~/.config/systemd/user/répertoire. Changez de répertoire et générez le fichier systemd dans le répertoire spécifié.

$ podman generate systemd --name chitragupta-db -f
/home/pratham/.config/systemd/user/container-chitragupta-db.service

Le fichier d’unité systemd a été généré sans aucune intervention de l’utilisateur et il est placé dans le bon répertoire.

Maintenant, il ne reste plus qu’à l’activer.

Étape 3 : Activer le service systemd

Maintenant que podman a généré automatiquement un fichier d’unité systemd au bon emplacement ( ~/.config/systemd/user/), il est temps d’activer ce service.

L’activation d’un service systemd pour un utilisateur particulier se fait à l’aide de l’ --useroption.

Utilisez la syntaxe de commande suivante pour ce faire :

systemctl --user enable SERVICE_NAME.service

Votre sortie devrait être similaire à ce qui est montré ci-dessous :

$ systemctl --user enable container-chitragupta-db.service
Created symlink /home/pratham/.config/systemd/user/default.target.wants/container-chitragupta-db.service → /home/pratham/.config/systemd/user/container-chitragupta-db.service.

Une fois activé, vous pouvez vérifier l’état de ce service systemd, assurez-vous d’utiliser l’ --useroption, car ce service est exécuté en tant qu’utilisateur actuel, au lieu d’être exécuté par root.

$ systemctl --user status container-chitragupta-db.service
○ container-chitragupta-db.service - Podman container-chitragupta-db.service
     Loaded: loaded (/home/pratham/.config/systemd/user/container-chitragupta-db.service; enabled; vendor preset: disabled)
     Active: inactive (dead)
       Docs: man:podman-generate-systemd(1)

Ne vous inquiétez pas si l’état du service est inactive (dead). Le conteneur chitragupta-dbest toujours en cours d’exécution et vous n’avez pas encore redémarré 😉

READ  Sudo sous Linux: Comment ça fonctionne ?

Étape 4 : Activer la persistance de l’utilisateur

Comme vous le savez maintenant, ce service est exécuté par un utilisateur normal ( prathamc’est l’utilisateur dans mon cas) et non par l’utilisateur root. Cela signifie que ledit utilisateur doit être connecté au démarrage et doit rester actif même s’il se déconnecte d’une session GUI ou TTY.

Ceci peut être réalisé par l’utilisation de la loginctlcommande. Depuis la session terminal de votre utilisateur, exécutez la commande suivante :

sudo loginctl enable-linger

Cette commande garantira qu’une session utilisateur pour votre utilisateur est générée au démarrage et reste active même après les déconnexions de l’interface graphique ou de la ou des sessions tty.

Enfin, le redémarrage des conteneurs gérés par Podman au démarrage a été activé. Un redémarrage redémarrera automatiquement les conteneurs dont vous avez créé un fichier d’unité systemd et les avez activés.

Ce fut un processus assez long, mais heureusement, aucune intervention manuelle n’a été nécessaire.

Conclusion

Ce tutoriel vous guide dans le processus de création de fichiers d’unité systemd pour gérer le démarrage automatique des conteneurs gérés par Podman, au démarrage. L’utilisation de systemd aide l’administrateur à garder un œil sur les conteneurs à l’aide de l’interface systemd que beaucoup connaissent.

Commentez et faites-nous part de vos réflexions à ce sujet. Si vous avez une autre façon de le faire, commentez ci-dessous.

5/5 - (1 vote)
SAKHRI Mohamed
SAKHRI Mohamed

Le blog d'un passionné d'informatique qui partage des actualités, des tutoriels, des astuces, des outils en ligne et des logiciels pour Windows, macOS, Linux, Web designer et jeux vidéo.

Publications: 3746

Laisser un commentaire

Your email address will not be published.