=====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.
====links====
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