Podman is a fork of Docker that Redhat is using. I really liked docker-compose functionality; fortunately there is a podman-compose project which is more or less the same thing.
I now have a setup where each podman container is controlled by a systemd service, set to run on startup, with version controlled podman-compose files.
First, I installed podman-compose:
sudo curl -o /usr/local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/devel/podman_compose.py
chmod +x /usr/local/bin/podman-compose
I then created podman-compose files (syntax identical to docker-compose) for each container. Here is one example (jackett.yml)
---
version: "2"
services:
jackett:
image: linuxserver/jackett
container_name: jackett
environment:
- PUID=1000
- PGID=1000
- TZ=America/Boise
volumes:
- /mnt/storage/Docker/Jackett/config:/config
- /mnt/storage/Docker/Jackett/downloads:/downloads
ports:
- 9117:9117
restart: unless-stopped
I then created a corresponding systemd unit file for each container:
#/etc/systemd/system/jackett.service
[Unit]
Description=Jackett
After=network.target
[Service]
Restart=always
# Compose up
ExecStart=/usr/local/bin/podman-compose -f /home/nicholas/podman/jackett.yml up
# Compose down, remove containers and volumes
ExecStop=/usr/local/bin/podman-compose -f /home/nicholas/podman/jackett.yml down -v
[Install]
WantedBy=multi-user.target
I then do a systemctl daemon-reload, and enable the service for startup:
sudo systemctl daemon-reload
sudo systemctl enable jackett
Success.
Why not create a single podman-compose file for all my services, instead of creating individual services for each container? I wanted to be able to clearly see log output for each container with journalctl -f -u <service name.> If you lump all your services in a single compose file, the output from each container gets all jumbled into that single service log. Separating out each container into its own service was more clean.