Docker RUN with Systemd

Cindy Piassale29 July 2020


L’utilisation de conteneurs (docker ou autre), pour l’installation de logiciels en entreprise, peut paraitre obscure pour les administrateurs systèmes.

Pour simplifier l’utilisation des conteneurs docker, systemd est une alternative à docker-compose.

Principe

L’idée générale est de définir chaque conteneur comme un service systemd. Ainsi l’administrateur utilise les commandes standard linux systemctl pour gérer ses applications.

De plus nous profitons de la gestion des services (démarrage automatique, dépendances, etc.) nativement géré par systemd.

Mise en oeuvre

Exemple avec un service de blogging très simple : ghost.

Dans le dossier /etc/systemd/system, on crée un fichier correspondant à notre service.

#/etc/systemd/system/ghost.service

[Unit]
Description=Docker container
BindsTo=docker.service
After=docker.service

[Service]
Restart=on-failure
RestartSec=10
ExecStartPre=-/usr/bin/docker kill ghost
ExecStartPre=-/usr/bin/docker rm ghost
ExecStart=/usr/bin/docker run --name ghost \
    -v "/var/ghost/data:/var/lib/ghost/content" \
    -e "url=http://localhost:8080" \
    -p 8080:2368 \
    ghost
ExecStop=/usr/bin/docker stop ghost

[Install]
WantedBy=multi-user.target

Pour pouvoir démarrer ce service, il est nécessaire d’installer docker et de créer le dossier /var/ghost/data que nous avons défini en volume lié et qui recevra les données du blog.

Exemple sous centos 7 :

sudo yum install yum-utils -y
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
sudo mkdir -p /var/ghost/data

Utilisation

Ce service s’utilise comme tout autre service avec les commandes habituelles :

systemctl start|restart|stop|status ghost

Une fois le service démarré, l’instance ghost que l’on vient de lancer sera disponible à l’adresse http://localhost:8080

Logs

La consultation des logs se fait grâce à la commande journalctl. Pour visualiser les logs d’un seul container vous pouvez faire la commande suivante :

journalctl -u <nom_conteneur>

Exemple avec l’application ghost :

journalctl -u ghost

Nous ferons prochainement un article plus spécifique sur la gestion des logs dans les conteneurs.


A propos de JECI

Spécialisations : Architecture Logicielle, Opensource, Performance, Test de Charge, Alfresco, DevOps, Docker, Kubernetes, CI/CD et Linux
SARL - Capital : 5000€, immatriculée au RCS de Dijon

Nous contacter

+33 9 72 38 21 92 info@jeci.fr

2013-2020 Jeci SARL | Mixed with v4.3.2 | Baked with JBake v2.6.4 | Photo by Valdas Miskinis on Unsplash