На семействе RHEL (AlmaLinux / Rocky) Podman обычно уже в репозиториях. Quadlet — описание контейнера в unit-файле, который systemd сам превращает в сервис. Удобно для демонов на сервере без Docker Compose.
sudo dnf install -y podman
podman --version
Для пользовательских (rootless) сервисов нужен lingering:
loginctl enable-linger "$USER"
Для root:
mkdir -p /etc/containers/systemd
Для пользователя:
mkdir -p ~/.config/containers/systemd
.containerСоздайте /etc/containers/systemd/web.container (или в ~/.config/... для rootless):
[Unit]
Description=Nginx via Podman Quadlet
Wants=network-online.target
After=network-online.target
[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
Volume=/var/www/html:/usr/share/nginx/html:Z
AutoUpdate=registry
[Service]
Restart=always
[Install]
WantedBy=multi-user.target
Флаг :Z важен при SELinux enforcing — иначе будут Permission denied на volume.
# root
systemctl daemon-reload
systemctl start web.service
systemctl status web.service --no-pager
# пользователь (rootless)
systemctl --user daemon-reload
systemctl --user start web.service
Логи:
journalctl -u web.service -f
# или
podman logs web
Имя сервиса обычно совпадает с именем файла: web.container → web.service.
Создайте сеть:
podman network create appnet
В .container добавьте:
Network=appnet
Для compose-подобных сценариев Podman умеет podman-compose / podman kube play, но Quadlet хорошо закрывает «один сервис — один unit».
В примере есть AutoUpdate=registry. Включение таймера:
systemctl enable --now podman-auto-update.timer
| Задача | Подход |
|---|---|
| Один-два долгоживущих сервиса | Quadlet + systemd |
| Сложный стек с зависимостями и Traefik-labels | Docker Compose |
| Rootless и меньше демона на хосте | Podman Quadlet от пользователя |
Итог: на AlmaLinux 9 контейнер становится обычным systemd-сервисом — привычный systemctl, журналы и автозапуск без отдельного compose-оркестратора.