Exécutez ceci dans le dossier où docker-compose.yml est situé :
curl -fsSL https://techoverflow.net/scripts/create-docker-compose-service.sh | sudo bash /dev/stdinCe 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 :
#!/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.serviceLe nom du service est le nom du dossier :
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 :
# Démarre automatiquement le service systemd
sudo systemctl enable $SERVICENAME.service
# Démarre le service systemd maintenant
sudo systemctl start $SERVICENAME.service