Создайте сервис systemd для вашего проекта docker-compose за 10 секунд

Запустите это в директории, где находится docker-compose.yml:

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

Этот скрипт автоматически создаст сервис systemd, который запускает docker-compose up и завершает работу с помощью docker-compose down. Наш скрипт также выполнит systemctl enable скрипта (т.е. автозапуск при загрузке) и systemctl start (запуск немедленно).

Как это работает

Команда выше загрузит скрипт с TechOverflow и запустит его в bash:

create-docker-compose-service.sh
#!/bin/bash
# Создать сервис systemd, который автоматически запускает и управляет экземпляром docker-compose в текущей директории
# by Uli Köhler - https://techoverflow.net
# Licensed as CC0 1.0 Universal
SERVICENAME=$(basename $(pwd))

echo "Создание сервиса systemd... /etc/systemd/system/${SERVICENAME}.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)
# Остановить контейнер (если запущен) при запуске юнита
ExecStartPre=$(which docker-compose) -f docker-compose.yml down
# Запустить контейнер при запуске юнита
ExecStart=$(which docker-compose) -f docker-compose.yml up
# Остановить контейнер при остановке юнита
ExecStop=$(which docker-compose) -f docker-compose.yml down

[Install]
WantedBy=multi-user.target
EOF

echo "Включение и запуск $SERVICENAME"
# Автозапуск сервиса systemd
sudo systemctl enable $SERVICENAME.service
# Запустить сервис systemd сейчас
sudo systemctl start $SERVICENAME.service

Имя сервиса — это имя директории:

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

Теперь мы создадим файл сервиса в /etc/systemd/system/${SERVICENAME}.service, используя шаблон, встроенный в скрипт

Скрипт автоматически определит расположение docker-compose с помощью $(which docker-compose) и, наконец, включит и запустит сервис systemd:

enable-start-service.sh
# Автозапуск сервиса systemd
sudo systemctl enable $SERVICENAME.service
# Запустить сервис systemd сейчас
sudo systemctl start $SERVICENAME.service

Check out similar posts by category: Docker Linux