Créer un service systemd pour votre projet docker-compose en 10 secondes

Exécutez ceci dans le dossier où docker-compose.yml est situé :

create-docker-compose-service.sh
curl -fsSL https://techoverflow.net/scripts/create-docker-compose-service.sh | sudo bash /dev/stdin

Ce script créera automatiquement un service systemd qui démarre docker-compose up et s’arrête en utilisant docker-compose down. Notre script fera aussi systemctl enable le script (i.e. démarre automatiquement au boot) et systemctl start le (démarre immédiatement).

Comment ça fonctionne

La commande ci-dessus téléchargera le script depuis TechOverflow et l’exécutera dans bash :

create-docker-compose-service.sh
#!/bin/bash
# Crée un service systemd qui démarre automatiquement & gère une instance docker-compose dans le dossier actuel
# par Uli Köhler - https://techoverflow.net
# Licencié comme CC0 1.0 Universal
SERVICENAME=$(basename $(pwd))

echo "Creating systemd service... /etc/systemd/system/${SERVICENAME}.service"
# Crée le fichier de service systemd
sudo cat >/etc/systemd/system/$SERVICENAME.service <<EOF
[Unit]
Description=$SERVICENAME
Requires=docker.service
After=docker.service

[Service]
Restart=always
User=root
Group=docker
TimeoutStopSec=15
WorkingDirectory=$(pwd)
# Arrête le conteneur (s'il est en cours d'exécution) quand l'unité est démarrée
ExecStartPre=$(which docker-compose) -f docker-compose.yml down
# Démarre le conteneur quand l'unité est démarrée
ExecStart=$(which docker-compose) -f docker-compose.yml up
# Arrête le conteneur quand l'unité est arrêtée
ExecStop=$(which docker-compose) -f docker-compose.yml down

[Install]
WantedBy=multi-user.target
EOF

echo "Enabling & starting $SERVICENAME"
# Démarre automatiquement le service systemd
sudo systemctl enable $SERVICENAME.service
# Démarre le service systemd maintenant
sudo systemctl start $SERVICENAME.service

Le nom du service est le nom du dossier :

example.sh
SERVICENAME=$(basename $(pwd))

Maintenant nous créerons le fichier de service dans /etc/systemd/system/${SERVICENAME}.service en utilisant le modèle intégré dans le script

Le script déterminera automatiquement l’emplacement de docker-compose en utilisant $(which docker-compose) et finalement activera et démarrera le service systemd :

enable-start-service.sh
# Démarre automatiquement le service systemd
sudo systemctl enable $SERVICENAME.service
# Démarre le service systemd maintenant
sudo systemctl start $SERVICENAME.service

Consultez les articles similaires par catégorie : Docker Linux