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 :
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
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.
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. 🙂A ce propos, systemd embarque un superbe système de containers (natif) : systemd-nspawn.
C’est bien vu ça. Est-ce la façon dont tu lances les conteneurs relatifs à ton site et son monitoring ?
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.