Des containers avec systemd

Des containers avec systemd

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 avec docker ps.

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

Partager cette publication

Laisser un commentaire

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