====== Notes ======
* Podman containers can run without root privileges.
* Containers can be built with Buildah and Skopeo.
* Pod: One ore more containers sharing a namespace and cgroups.
* Podman can be used as an alias for Docker (''%%alias docker=podman%%''), but has more capabilities.
* Podman runs containers on single Linux nodes together with systemd.
* Containers can be started/managed over a REST API.
* Podman runs OCI (Open Container Initiative) containers.
* Podman containers can run systemd.
* A podman container is a child process of the podman command.
* Podman completely separates user namespaces.
* Podman does not need a daemon to run. (The docker daemon is a single point of failure.)
* Podman supports Pods (like Kubernetes) and runs Kubernetes YAML.
* The ''%%docker%%'' group virtually has root rights; not so with Podman.
Ressources:
* [[https://podman.io/|podman.io]]
* [[https://www.redhat.com/en/topics/containers/what-is-podman|What is Podman?]]
* [[https://www.manning.com/books/podman-in-action|Podman in Action]]
====== Setup ======
Install Podman (on Arch Linux):
# pacman -S podman buildah skopeo fuse-overlayfs slirp4netns
Allow unprivileged users to run containers:
# sysctl kernel.unprivileged_userns_clone=1
Set ''%%subuid%%'' and ''%%subgid%%'' for user to run containers (e.g. ''%%patrick%%''):
# touch /etc/subuid /etc/subgid
# chmod 644 /etc/subuid /etc/subgid
# usermod --add-subuids 100000-165535 --add-subgids 100000-165535 patrick
Propagate changes to Podman:
$ podman system migrate
===== Command Line Usage =====
Test using the alpine container:
$ podman run -it docker.io/alpine
Build an image:
$ podman build . -t whatever
Run a container (which exposes port ''%%8080%%''):
$ podman run -p 8080:8080 --name whatever whatever
==== systemd Integration ====
Generate a systemd unit:
$ podman generate systemd --name whatever
Save the output as a unit file:
$ podman generate systemd --name whatever --new --files
./container-whatever.service
Copy the unit file to user’s systemd config folder:
$ mv container-whatever.service ~/.config/systemd/user/
Reload the daemon, and start container using systemd unit:
$ systemctl --user daemon-reload
$ systemctl --user enable --now container-whatever.service
$ systemctl --user restart container-whatever.service
====== Networking ======
Figure out the standard gateway of a network:
podman network inspect [network] --format '{{ (index .Subnets 0).Gateway }}'