Podman is a container runtime that provides features similar to Docker. It's part of the libpod library and can be used to manage pods (Kubernetes Terminology), containers, container images, and container volumes. Podman was very different with Docker that using the client-server architecture and required a docker daemon in order to run, while Podman doesn't require any daemon to run and also can be run flawlessly without root privileges.
In this tutorial, we're going to show you how to install Podman manually from source code on an Ubuntu server. We will install all dependencies needed for the Podman installation, including the conmon (container monitoring), CNI (Container Network Interface) plugins, and Runc the OCI compliant runtime.
Prerequisite
- Ubuntu 18.04 server
- Root privileges
What we will do:
- Install Dependencies
- Download Additional Configurations
- Install Conmon (Container Monitoring)
- Install CNI (Container Network Interface) Plugins
- Install Runc OCI Container Runtime
- Install Podman
Step 1 - Install Dependencies
Firstly, we need to install go and some packages dependencies to build the Podman and other packages from the source code.
Before going any further, ensure update ubuntu repositories and upgrade the system.
sudo apt update
sudo apt upgrade
Now install go and all packages dependencies using the following apt command.
sudo apt install -y btrfs-tools git golang-go go-md2man iptables libassuan-dev libdevmapper-dev libglib2.0-dev libc6-dev libgpgme-dev libgpg-error-dev libprotobuf-dev libprotobuf-c-dev libostree-dev libseccomp-dev libselinux1-dev pkg-config
Wait for all packages installation.
Step 2 - Download Additional Configuration
After installing Podman packages dependencies, we need to create the containers directory '/etc/containers' and download some configuration into it.
Run the command below to create the containers directory '/etc/containers'.
sudo mkdir -p /etc/containers
After that, download the container registries and policy configuration into it using the curl commands below.
sudo curl https://raw.githubusercontent.com/projectatomic/registries/master/registries.fedora -o /etc/containers/registries.conf
sudo curl https://raw.githubusercontent.com/containers/skopeo/master/default-policy.json -o /etc/containers/policy.json
More details about each configuration.
registries.conf - It can be used to define container images registry. And by default, the Podman will retrieve and download container images based on that file and from images registries such as docker.io, registry.fedoraproject.org, and registry.access.redhat.com.
policy.json - It's part of the 'skopeo' project that can be used for various operations on container images and image repositories.
Step 3 - Install Conmon Container Monitoring
Conmon or Container Monitoring is the part of the CRI-O project that can be used to monitor the containers, handle logging from the container process, serve and attach clients and detects Out Of Memory (OOM) situations. Podman used the conmon to monitor containers, each container has conmon container monitoring.
In this step, we're going to build and install the conmon from the CRI-O source code. But firstly, we need to create and define the go path project directory.
By default, go 1.8+ will be used the '~/go' directory as a '$GOPATH' project directory. So, create using the following command.
export GOPATH=~/go
mkdir -p $GOPATH
After that, download the CRI-O source code to the '$GOPATH' project directory.
git clone https://github.com/kubernetes-sigs/cri-o $GOPATH/src/github.com/kubernetes-sigs/cri-o
Go into the CRI-O project directory.
cd $GOPATH/src/github.com/kubernetes-sigs/cri-o
Now build and install the conmon utility using the following commands.
mkdir bin
make bin/conmon
sudo install -D -m 755 bin/conmon /usr/libexec/podman/conmon
As a result, the conmon utility will be installed on the '/usr/libexec/podman' directory. Check it using the following command.
/usr/libexec/podman/conmon --help
And you will be shown the result as below.
Step 4 - Install CNI (Container Network Interface) Plugins
In this step, we're going to install manually from source code the standard networking plugins for Linux containers CNI (Container Network Interface) plugins.
Download the CNI plugins source code to the '$GOPATH' project directory and then go into it.
git clone https://github.com/containernetworking/plugins.git $GOPATH/src/github.com/containernetworking/plugins
cd $GOPATH/src/github.com/containernetworking/plugins
After that, build the CNI plugins especially for the Linux system using the build script.
./build_linux.sh
Once it's complete, create a new directory '/usr/libexec/cni' and move all CNI binaries plugins into that directory.
sudo mkdir -p /usr/libexec/cni
sudo cp bin/* /usr/libexec/cni
Next, we need to create the CNI configuration directory and download the sample of CNI configuration for Podman.
Create a new directory '/etc/cni/net.d' and download the CNI configuration into it using the following commands.
mkdir -p /etc/cni/net.d
curl -qsSL https://raw.githubusercontent.com/containers/libpod/master/cni/87-podman-bridge.conflist | tee /etc/cni/net.d/99-loopback.conf
And as a result, the CNI plugins installation has been completed.
You can check all available plugins on the '/usr/libexec/cni' directory.
ls -lah /usr/libexec/cni
Step 5 - Install Runc OCI Container Runtime
Runc is the OCI container runtime that can be used for spawning and running containers, and the Podman is used it to launch containers.
In this step, we will install the Runc OCI runtime from source code. So, we need to download Runc source codes to the '$GOPATH' project directory.
Download the Runc source code to the '$GOPATH' project directory and go into it.
git clone https://github.com/opencontainers/runc.git $GOPATH/src/github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
Now build and install the Runc OCI runtime using the following command.
make BUILDTAGS="seccomp"
sudo cp runc /usr/bin/runc
Once the installation is complete, check the Runc OCI container runtime using the following command.
runc --help
And you will be shown the result as below.
Step 6 - Install Podman
Download podman source code to the '$GOPATH' project directory and go into it.
git clone https://github.com/containers/libpod/ $GOPATH/src/github.com/containers/libpod
cd $GOPATH/src/github.com/containers/libpod
Now build and install Podman by running the following command.
make
sudo make install PREFIX=/usr
Once the installation is complete, run the podman commands below.
podman version
podman info
And you will be shown the Podman version and installation environment.
Testing to pull container image.
podman search alpine
podman pull alpine
podman images
Testing to run a container.
podman run --net host --rm -ti alpine echo 'Hello Podman'
With that results, the Podman installation and configuration on Ubuntu 18.04 has been completed successfully.
Using Podman
A detailed tutorial on how to use Podman to create images, volumes, and containers is available here: Getting Started with Podman: Manage Images, Containers and Volumes