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