10 Podman Overview #
Podman is short for Pod Manager
Tool. It is a daemonless container engine for developing, managing, and
running Open Container Initiative (OCI) containers on a Linux system, and it
offers a drop-in alternative for Docker. Podman is the default container
runtime in openSUSE Kubic—a certified Kubernetes distribution built
on top of openSUSE. Podman can be used to create OCI-compliant container
images using a Dockerfile and a range of commands identical to Docker Open Source Engine. For
example, the podman build
command performs the same task
as docker build
. In other words, Podman provides a
drop-in replacement for Docker Open Source Engine.
Moving from Docker Open Source Engine to Podman does not require any changes in the established workflow. There is no need to rebuild images, and you can use the exact same commands to build and manage images as well as running and controlling containers.
Podman differs from Docker Open Source Engine in two important ways.
Podman does not uses a daemon, so the container engine interacts directly with an image registry, containers, and image storage. As Podman does not have a daemon, it provides integration with systemd. This makes it possible to control containers via systemd units. You can create these units for existing containers as well as generate units that can start containers if they do not exist in the system. Moreover, Podman can run systemd inside containers.
Because Podman relies on several namespaces, which provide an isolation mechanism for Linux processes, it does not require root privileges to create and run containers. This means that Podman can run in the root mode as well as in an unpriviledged environment. Moreover, a container created by an unprivileged user cannot get higher privileges on the host than the container's creator.
10.1 Podman Installation #
To install Podman, run the sudo zypper in podman
. Run
then podman --version
to check whether Podman has been
installed successfully.
By default, Podman requires root privileges. To enable rootless mode for the current user, run the following command:
>
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 USER
Reboot the machine to enable the change. Instead of rebooting, you can stop the session of the current user. To do this, run the loginctl list-sessions | grep $USER
and note the session ID. Use then the command loginctl kill-session SESSION_ID
to terminate the session.
The command above defines a range of local uids to which the uids allocated
to users inside the container are mapped on the host. Note that the ranges
defined for different users must not overlap. It is also important that the
ranges do not reuse the uid of an existing local user or group. By default,
adding a user with the useradd
on SLES 15,
automatically allocates subuid and subgid ranges.
Running a container with Podman in the rootless mode on SUSE Linux Enterprise Server may fail,
because the container needs read access to the SUSE Customer Center credentials. For
example, running a container with the podman run -it --rm
registry.suse.com/suse/sle15 bash
, and then executing
zypper ref
results in the following error message:
Refreshing service 'container-suseconnect-zypp'. Problem retrieving the repository index file for service 'container-suseconnect-zypp': [container-suseconnect-zypp|file:/usr/lib/zypp/plugins/services/container-suseconnect-zypp] Warning: Skipping service 'container-suseconnect-zypp' because of the above error. Warning: There are no enabled repositories defined. Use 'zypper addrepo' or 'zypper modifyrepo' commands to add or enable repositories
To solve the problem, grant the current user the required access rights by running the following command on the host:
>
sudo setfacl -m u:$USER:r /etc/zypp/credentials.d/*
Log out and log in again to apply the changes.
To give multiple users the required access, create a dedicated group using
the groupadd GROUPNAME
command. Use then the following command to change the group ownership and
rights of files in the /etc/zypp/credentials.d/
directory.
>
sudo chgrp GROUPNAME /etc/zypp/credentials.d/*>
sudo chmod g+r /etc/zypp/credentials.d/*
You can then grant a specific user write access by adding them to the created group.
10.2 Podman Basic Usage #
Since Podman is compatible with Docker Open Source Engine, it features the same commands and
options. For example, the podman pull
command fetches a
container image from a registry, while the podman build
command is used to build images.
One of the advantages of Podman over Docker Open Source Engine is that Podman can be
configured to search multiple registries. To make Podman search the
SUSE Registry first and use Docker Hub as a fallback, add the following
configuration to the /etc/containers/registries.conf
file:
[registries.search] registries = ["registry.suse.com", "docker.io"]
Similar to Docker Open Source Engine, Podman can run containers in an interactive mode,
allowing you to inspect and work with an image. To run the
suse/sle15
in the interactive mode, use the following
command:
>
podman run --rm -ti suse/sle15
10.2.1 Building Images with Podman #
Podman can build images from a Dockerfile. The podman
build
command behaves as docker build
, and it
accepts the same options.
Podman's companion tool Buildah provides an alternative way to build images. For further information about Buildah, refer to Chapter 11, Buildah Overview.