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