Containers with Podman
Goal
Podman replaces Docker on RHEL, daemonless and rootless by default. The exam asks you to run a containerised service and keep it persistent.
Run
podman run -d --name web -p 8080:80 docker.io/library/nginx
podman ps
podman logs web
podman inspect web | head
podman exec -it web /bin/bash
podman stop web; podman rm web
Images
podman search nginx
podman pull registry.access.redhat.com/ubi9/ubi
podman images
podman rmi IMAGE_ID
Volumes (data outside the container)
podman volume create appdata
podman run -d --name app -v appdata:/data -p 8080:8080 IMAGE
podman volume ls; podman volume inspect appdata
Rootless basics
id -u # ports < 1024 are not bindable without a setting
sysctl net.ipv4.ip_unprivileged_port_start=80 # persistent: /etc/sysctl.d/
Data lives in ~/.local/share/containers, never in /var/lib unless running as root.
Start at boot (quadlet, RHEL 9+/10)
~/.config/containers/systemd/web.container:
[Unit]
Description=nginx web
[Container]
Image=docker.io/library/nginx
PublishPort=8080:80
[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now web.service
loginctl enable-linger eric # survives logout
Verify
podman ps; curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080