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.
How do you pull :latest images with podman-compose in systemd services?
“–rmi all” is currently not supported by podman-compose on down.