Criar um serviço systemd para seu projeto docker-compose em 10 segundos

Rode isto no diretório onde docker-compose.yml está localizado:

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

Este script criará automaticamente um serviço systemd que inicia docker-compose up e desliga usando docker-compose down. Nosso script também fará systemctl enable do script (i.e. iniciar automaticamente no boot) e systemctl start (iniciá-lo imediatamente).

Como funciona

O comando acima baixará o script do TechOverflow e o rodará no bash:

create-docker-compose-service.sh
#!/bin/bash
# Criar um serviço systemd que autoinicia e gerencia uma instância docker-compose no diretório atual
# by Uli Köhler - https://techoverflow.net
# Licensed as CC0 1.0 Universal
SERVICENAME=$(basename $(pwd))

echo "Creating systemd service... /etc/systemd/system/${SERVICENAME}.service"
# Criar arquivo de serviço 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)
# Desligar contêiner (se em execução) quando a unidade for iniciada
ExecStartPre=$(which docker-compose) -f docker-compose.yml down
# Iniciar contêiner quando a unidade for iniciada
ExecStart=$(which docker-compose) -f docker-compose.yml up
# Parar contêiner quando a unidade for parada
ExecStop=$(which docker-compose) -f docker-compose.yml down

[Install]
WantedBy=multi-user.target
EOF

echo "Enabling & starting $SERVICENAME"
# Autoiniciar serviço systemd
sudo systemctl enable $SERVICENAME.service
# Iniciar serviço systemd agora
sudo systemctl start $SERVICENAME.service

O nome do serviço é o nome do diretório:

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

Agora criaremos o arquivo de serviço em /etc/systemd/system/${SERVICENAME}.service usando o modelo embutido no script

O script determinará automaticamente a localização do docker-compose usando $(which docker-compose) e finalmente habilitará e iniciará o serviço systemd:

enable-start-service.sh
# Autoiniciar serviço systemd
sudo systemctl enable $SERVICENAME.service
# Iniciar serviço systemd agora
sudo systemctl start $SERVICENAME.service

Check out similar posts by category: Docker Linux