Skip to content

Manager des containers avec systemd

banner-systemd-1

Utiliser des containers Docker à la volée est relativement simple, avec un docker run on lance simplement notre application, mais parfois, les managers tels quels peut vite s’avérer compliqué et difficile à suivre. Pour simplifier le lancement et la gestion de containers Docker, on peut simplement utiliser des unités systemd.

Créer une unité systemd

Pour avoir notre premier service systemd qui gérera notre container (Redis dans l’exemple), on va créer le fichier /etc/systemd/system/redis.service :

[Unit]
Description=Redis Service  
After=docker.service  
Requires=docker.service

[Service]
ExecStartPre=-/usr/bin/docker kill redis  
ExecStartPre=-/usr/bin/docker rm redis  
ExecStartPre=-/usr/bin/docker pull redis:latest  
ExecStart=/usr/bin/docker run  -d --name redis --restart always redis:latest  
ExecStop=/usr/bin/docker stop redis

[Install]
WantedBy=multi-user.target  

Maintenant que notre service existe, on peut l’ajouter au démarrage du système et le démarrer. Le premier lancement pourra prendre quelque temps car on récupère (pull) la dernière version de l’image de Redis :

systemctl enable redis  
systemctl daemon-reload  
systemctl start redis 

On peut ensuite vérifier que notre container tourne correctement :

dockerps-redis

Vous pouvez désormais gérer votre service directement depuis systemd !

Nous allons voir également comment gérer un stack de containers grâce à systemd et docker-compose, pour cela on peut créer une unité systemd et remplacer la fin du fichier par cela :

ExecStartPre=-/usr/local/bin/docker-compose -f /path/compose-file.yml down  
ExecStart=/usr/local/bin/docker-compose -f /path/compose-file.yml up -d  
ExecStop=/usr/local/bin/docker-compose -f /path/compose-file.yml stop  

Il suffit ensuite de créer son fichier docker-compose.yml au bon endroit pour gérer le lancement de votre stack de container directement depuis systemd.

Pour redémarrer proprement votre service, utilisez la commande suivante :

systemctl restart redis
Published inDebianDockerLinuxTutoriel

5 Comments

  1. David David

    Bonjour,
    J’en profite pour mentionner au passage l’option restart :always à inclure dans un fichier docker-compose ou à passer en paramètre de docker run, et qui permet de relancer automatiquement un container au reboot.

    • valentin valentin

      Salut David, merci pour ton commentaire. Tu as pas tord, c’est bien pratique de préciser --restart always, cependant, dans ce cas, comme c’est systemd qui gère le démarrage, ce n’est pas forcément utile. 🙂

  2. Wojtek Wojtek

    A ce propos, systemd embarque un superbe système de containers (natif) : systemd-nspawn.

  3. C’est bien vu ça. Est-ce la façon dont tu lances les conteneurs relatifs à ton site et son monitoring ?

    • valentin valentin

      Salut Maoli, Pour ma part, je n’utilise pas SystemD dans ma petite architecture perso car je gère le lancement de mes containers avec mon gestionnaire de configuration favoris Saltstack. Tu pourras trouvez des articles ou j’explique cela. 🙂 Mais SystemD peut très bien faire l’affaire.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Proudly hosted with Open-sources Softwares.