Запустите это в директории, где находится 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.serviceIf this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow