在 10 秒内为你的 docker-compose 项目创建 systemd 服务

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
# 创建一个自动启动并管理当前目录中 docker-compose 实例的 systemd 服务
# 作者 Uli Köhler - https://techoverflow.net
# 许可为 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 中创建服务文件

脚本将使用 $(which docker-compose) 自动确定 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