Use systemd to start docker-compose services.

Single service

The simplest solution is to create basic service file.

$ sudo tee /etc/systemd/system/pihole.service <<EOF
[Unit]
Description=pihole service
Requires=docker.service
After=docker.service

[Service]
Restart=always

User=pihole
Group=pihole

WorkingDirectory=/opt/services/pihole

ExecStart=/usr/bin/docker-compose -f docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f docker-compose.yml down

[Install]
WantedBy=multi-user.target
EOF

Reload systemd configuration.

$ sudo systemctl daemon-reload

Enable and start service.

$ sudo systemctl enable --now pihole

Inspect service status.

$ sudo systemctl status --now  pihole
● pihole.service - pihole service
     Loaded: loaded (/etc/systemd/system/pihole.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-12-22 18:20:58 CET; 479ms ago
   Main PID: 288010 (docker-compose)
      Tasks: 1 (limit: 779)
        CPU: 468ms
     CGroup: /system.slice/pihole.service
             └─288010 /usr/bin/python3 /usr/bin/docker-compose -f docker-compose.yml up

Dec 22 18:20:58 raspberrypi systemd[1]: Started pihole service.

Multiple services

Create service template that will start docker-compose inside /opt/services/ sub-directory and dedicated user.

$ sudo tee /etc/systemd/system/docker-compose.service@ <<EOF
[Unit]
Description=%I service
Requires=docker.service
After=docker.service

[Service]
Restart=always

User=%I
Group=%I

WorkingDirectory=/opt/services/%I

ExecStart=/usr/bin/docker-compose -f docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f docker-compose.yml down

[Install]
WantedBy=multi-user.target
EOF

Reload systemd configuration.

$ sudo systemctl daemon-reload

Enable and start service.

$ sudo systemctl enable --now docker-compose@pihole

Inspect service status.

$ sudo systemctl status --now  docker-compose@pihole
● docker-compose@pihole.service - pihole service
     Loaded: loaded (/etc/systemd/system/docker-compose@.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-12-22 18:27:58 CET; 479ms ago
   Main PID: 288012 (docker-compose)
      Tasks: 1 (limit: 779)
        CPU: 468ms
     CGroup: /system.slice/system-docker\x2dcompose.slice/docker-compose@pihole.service
             └─288012 /usr/bin/python3 /usr/bin/docker-compose -f docker-compose.yml up

Dec 22 18:27:58 raspberrypi systemd[1]: Started pihole service.