Einen systemd-Dienst für Ihr docker-compose-Projekt in 10 Sekunden erstellen

English Deutsch

Führen Sie dies im Verzeichnis aus, in dem sich docker-compose.yml befindet:

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

Dieses Skript erstellt automatisch einen systemd-Dienst, der docker-compose up startet und mit docker-compose down herunterfährt. Unser Skript führt außerdem systemctl enable für das Skript aus (d.h. automatischer Start beim Booten) und startet es mit systemctl start (sofortiger Start).

Funktionsweise

Der obige Befehl lädt das Skript von TechOverflow herunter und führt es in bash aus:

create-docker-compose-service.sh
#!/bin/bash
# Einen systemd-Dienst erstellen, der eine docker-compose-Instanz im aktuellen Verzeichnis automatisch startet und verwaltet
# by Uli Köhler - https://techoverflow.net
# Licensed as CC0 1.0 Universal
SERVICENAME=$(basename $(pwd))

echo "Erstelle systemd-Dienst... /etc/systemd/system/${SERVICENAME}.service"
# systemd-Dienstdatei erstellen
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)
# Container herunterfahren (falls laufend) wenn Unit gestartet wird
ExecStartPre=$(which docker-compose) -f docker-compose.yml down
# Container starten wenn Unit gestartet wird
ExecStart=$(which docker-compose) -f docker-compose.yml up
# Container stoppen wenn Unit gestoppt wird
ExecStop=$(which docker-compose) -f docker-compose.yml down

[Install]
WantedBy=multi-user.target
EOF

echo "Aktiviere & starte $SERVICENAME"
# systemd-Dienst automatisch starten
sudo systemctl enable $SERVICENAME.service
# systemd-Dienst jetzt starten
sudo systemctl start $SERVICENAME.service

Der Dienstname ist der Verzeichnisname:

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

Nun erstellen wir die Dienstdatei in /etc/systemd/system/${SERVICENAME}.service mit der im Skript eingebetteten Vorlage

Das Skript bestimmt automatisch den Speicherort von docker-compose mit $(which docker-compose) und aktiviert und startet schließlich den systemd-Dienst:

enable-start-service.sh
# systemd-Dienst automatisch starten
sudo systemctl enable $SERVICENAME.service
# systemd-Dienst jetzt starten
sudo systemctl start $SERVICENAME.service

Check out similar posts by category: Docker, Linux