Skip to content

Docker Container als Service starten

Damit wir einen Docker Container als Service starten können, erstellen wir uns zuerst ein Unit File in /lib/systemd/system/rpxconf.service. In diesem Beispiel heißt unser Service rpxconf und ist eine Web Applikation.

[Unit]
Description=Rpxconf service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
WorkingDirectory=/home/tux/build/docker/rpxconf/docker
Environment=HOME=/home/tux
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
ExecReload=/usr/local/bin/docker-compose restart -d
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Eine Beschreibung der Optionen des Unit Files.

Abschnitt Option Beschreibung
[Unit] Description Kurze Beschreibung des Services („Rpxconf service“)
[Unit] Requires Definiert Abhängigkeiten – hier: docker.service muss gestartet sein
[Unit] After Startreihenfolge – dieser Service startet erst nach docker.service
[Service] Type Starttyp des Services – oneshot bedeutet einmaliger Start und dann exit
[Service] WorkingDirectory Arbeitsverzeichnis, in dem der Service ausgeführt wird (/home/tux/build/docker/rpxconf/docker wo die Datei docker-compose.yml sich befinden. )
[Service] Environment Setzt Umgebungsvariablen – hier HOME=/home/tux (Wir verwenden $HOME in der docker-compose.yml, daher muss diese gesetzt werden)
[Service] ExecStart Kommando, das beim Start ausgeführt wird (docker-compose up -d)
[Service] ExecStop Kommando, das beim Stop ausgeführt wird (docker-compose down)
[Service] ExecReload Kommando für Reload/Restart des Services (docker-compose restart -d)
[Service] RemainAfterExit yes bedeutet, dass der Service nach oneshot Exit als aktiv gilt
[Install] WantedBy Definiert Zielgruppe, hier: multi-user.target (Service startet im normalen Mehrbenutzerbetrieb)

Nachdem wir nun das Unit File erstellt haben, laden wir den systemd neu.

sudo systemctl daemon-reload

Nun aktivieren wir den Service mit enable, damit dieser beim Booten auch automatisch gestartet wird. Im Anschluß starten start wir den Service und lassen uns den Status anzeigen.

sudo systemctl enable rpxconf
sudo systemctl start rpxconf
sudo systemctl status rpxconf