Table of Contents

Podman

Images

PLease check also https://www.tmade.de/wiki/doku.php?id=docker:docker and replace docker with podman!

podman images                                                                   #list all images
podman rmi $(podman images -q) -f                                               #delete images forcefull
podman system prune --all --force && podman rmi --all -f                        #clean podman and delete images

Commands

podman system reset               #system reset

Podman Desktop

https://podman-desktop.io/docs/installation/linux-install

sudo apt install flatpak podman
flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user flathub io.podman_desktop.PodmanDesktop
flatpak update --user io.podman_desktop.PodmanDesktop
flatpak uninstall io.podman_desktop.PodmanDesktop
flatpak uninstall --unused
flatpak run io.podman_desktop.PodmanDesktop

Container

podman run -itd mycontainer:latest bash             #deploy container "mycontainer" with tag "latest" in daemon-mode
podman container ls                                 #show running containers
podman container ls -a                              #check status of all containers (Up and Exited)
podman ps                                           #show running containers
podman exec -it 0d029837451d bash                   #enter bash in running container

Quadlet

Quadlets replace docker-compose/ podman-compose and use systemd.

https://www.redhat.com/en/blog/quadlet-podman

https://giacomo.coletto.io/blog/podman-quadlets/

https://matduggan.com/replace-compose-with-quadlet/

mkdir -p $HOME/.config/containers/systemd/

Example “$HOME/.config/containers/systemd/mytest.container”:

[Unit]
Description=The sleep container
After=local-fs.target

[Container]
ContainerName=mytest
Image=registry.access.redhat.com/ubi9-minimal:latest
#AutoUpdate=registry
Exec=sleep 1000
#Exec=/bin/sh -c 'while true; do sleep 30; done'
#Network=my.network
HostName=mytest
PublishPort=8080:8080
Environment=VERSION="1.0"
Environment=LOGLEVEL="info"

#HealthCmd=curl http://127.0.0.1:8080
#UserNS=keep-id:uid=1000,gid=1000
#Volume=%h/containers/storage/uptime-kuma:/app/data

[Service]
Restart=always
TimeoutStartSec=300

[Install]
# Start by default on boot
WantedBy=multi-user.target default.target

gitlab.container:

[Unit]
Description=gitlab
After=local-fs.target

[Container]
ContainerName=gitlab
Image=gitlab/gitlab-ce:18.5.3-ce.0

HostName=gitlab.local
PublishPort=8443:8443
PublishPort=8022:22
#PublishPort=8081:80
#PublishPort=8080:8080

Environment=GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.home:8443'; gitlab_rails['gitlab_shell_ssh_port'] = 8022;"

Volume=/data/gitlab/config:/etc/gitlab:Z
Volume=/data/gitlab/data:/var/opt/gitlab:Z
Volume=/data/gitlab/logs:/var/log/gitlab:Z

ShmSize=256m
#Network=my.network

[Service]
Restart=always
TimeoutStartSec=300

[Install]
# Start by default on boot
WantedBy=multi-user.target default.target

Use and check:

systemctl --user daemon-reload              #non-root-user
systemctl daemon-reload                     #running under root
/usr/libexec/podman/quadlet -dryrun -user   #non-root-user
/usr/libexec/podman/quadlet -dryrun         #running under root

Storage

Set “runroot” for non-root-user (runRoot should always be mapped to a tmpfs file system - non-persistent storage that will be erased upon every reboot of host):

~/.config/containers/storage.conf
[storage]
runroot = "/run/user/$UID/run"
driver = "overlay"                                                             #if xfs-filesystem is underlaying
volumepath: /home/podman/.local/share/containers/storage/volumes               volume path

root-user:

/etc/containers/storage.conf
[storage]
runroot = "/run/user/$UID/run"
driver = "overlay"                              #if xfs-filesystem is underlaying

Check:

podman info | grep runRoot
runRoot: /run/user/10000/run
podman info --format '{{ .Store.GraphDriverName }}'
overlay
or
podman info | grep -i GraphDriver
graphDriverName: overlay

Path:

/var/lib/containers/storage/volumes                     #Volumes are stored in for root-user
$HOME/.local/share/containers/storage/volumes           #Volumes are stored in for non-root-user

Remove old data for internal database:

rm -rf ~/.local/share/containers/             #non-root user
rm -rf /var/lib/containers                    #root

User setup

Running once to stay logged in while user is logged out the system:

loginctl enable-linger podman

Check:

loginctl list-users

Inside target user (such as “su - podman”):

Set “XDG_RUNTIME_DIR” to “/run/user/$(id -u)”. If this variable isn´t set, you can´t execute systemctl commands!!

mkdir ~/.bashrc.d
echo "export XDG_RUNTIME_DIR=/run/user/\$UID/" > ~/.bashrc.d/systemd
. ~/.bashrc.d/systemd

Check:

env | grep XDG_RUNTIME_DIR

This variable makes the use of

systemctl --user daemon-reload
systemctl --user status myservice.service

available.

https://www.reddit.com/r/podman/comments/171advd/whats_the_canonical_way_to_make_a_podman/

https://docs.podman.io/en/latest/markdown/podman-kube-play.1.html

https://www.redhat.com/en/blog/podman-play-kube-updates

https://access.redhat.com/solutions/7112659

https://access.redhat.com/solutions/7037240

https://www.google.com/search?client=firefox-b-d&q=Error%3A+database+graph+driver+%22%22+does+not+match+our+graph+driver+%22overlay%22%3A+database+configuration+mismatch