Cum rulezi containere Podman automat cu Quadlet și systemd

Configurare noua (How To)

Situatie

Quadlet îți permite să definești containere Podman în fișiere simple, iar systemd se ocupă de pornire, oprire și restart automat. Un fișier de tip .container este transformat de Podman într-un serviciu systemd.

1. Verifică Podman

Pe sistemul unde rulezi containerul:

podman --version
podman info --format '{{.Host.CgroupsVersion}}'

Quadlet necesită cgroups v2.

2. Creează directorul Quadlet

Pentru un container rootless, folosește:

mkdir -p ~/.config/containers/systemd

Acesta este unul dintre directoarele standard în care Quadlet caută configurațiile utilizatorului.

3. Creează definiția containerului

Exemplu: un server Nginx care ascultă pe portul 8080.

Creează fișierul:

nano ~/.config/containers/systemd/nginx.container

Conținut:

[Unit]
Description=NGINX container

[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80

[Service]
Restart=always

Cheia Image definește imaginea, iar PublishPort mapează portul 8080 al sistemului la portul 80 din container. Pentru imagine este recomandată folosirea unui nume complet calificat.

4. Reîncarcă systemd

systemctl --user daemon-reload

Quadlet generează serviciul systemd pornind de la fișierul .container.

5. Pornește containerul

systemctl --user start nginx.service

Verifică starea:

systemctl --user status nginx.service

Și verifică direct containerul:

podman ps

6. Testează aplicația

Pe aceeași mașină:

curl http://localhost:8080

Ar trebui să primești pagina implicită Nginx.

7. Pornește automat după restart

Pentru Quadlet nu este necesar să activezi manual serviciul generat cu systemctl enable. Pornirea automată se configurează în fișierul Quadlet prin secțiunea Install.

Modifică fișierul astfel:

[Unit]
Description=NGINX container

[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80

[Service]
Restart=always

[Install]
WantedBy=default.target

Apoi:

systemctl --user daemon-reload

Pentru un serviciu rootless care trebuie să ruleze și atunci când utilizatorul nu este autentificat, activează lingering:

sudo loginctl enable-linger $USER

Lingering permite instanței systemd a utilizatorului să rămână activă după logout și după reboot.

8. Vezi logurile

journalctl --user -u nginx.service

Pentru urmărire în timp real:

journalctl --user -u nginx.service -f

Podman recomandă journalctl pentru verificarea logurilor serviciilor Quadlet.

9. Dacă serviciul nu este găsit

Dacă primești o eroare de tip „Unit not found”, verifică generarea unității:

systemd-analyze --user --generators=true verify nginx.service

Pentru o analiză mai detaliată poți rula generatorul Quadlet în mod dry-run:

/usr/lib/systemd/system-generators/podman-system-generator --user --dryrun

Aceste comenzi ajută la identificarea erorilor de sintaxă sau a opțiunilor Quadlet incompatibile.

Fluxul de bază

În practică, ciclul este:

nginx.container
      ↓
systemd --user daemon-reload
      ↓
nginx.service
      ↓
podman run
      ↓
containerul rulează

Avantajul principal este că configurația containerului rămâne declarativă și este gestionată de systemd, inclusiv restartul și pornirea automată.

Rootless vs. rootful

Pentru rootless:

~/.config/containers/systemd/
systemctl --user
podman ps

Pentru rootful:

/etc/containers/systemd/
sudo systemctl
sudo podman ps

Directorul rootless și cel rootful sunt diferite, iar comenzile systemd trebuie executate în contextul corespunzător.

Pe scurt: scrii un fișier .container, îl pui în directorul Quadlet, rulezi daemon-reload, apoi gestionezi containerul cu systemctl. Asta elimină nevoia de scripturi separate pentru pornire și restart.

Solutie

Tip solutie

Permanent

Voteaza

(0 din 0 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?