Introduction:
Podman is used to develop, manage and run OCI Containers on our Linux System. It runs without starting daemon every time. In today tutorial, we will cover the installation of Podman on our Debian System.
Step 1: Updating your system
Update your system by running
sudo apt -y update && sudo apt -y upgrade
Step 2: Installing pre-requisites
In our case we are going to build the packages from source code. Install the required dependencies you want to use
sudo apt -y install \
gcc \
make \
cmake \
git \
btrfs-progs \
golang-go \
go-md2man \
iptables \
libassuan-dev \
libc6-dev \
libdevmapper-dev \
libglib2.0-dev \
libgpgme-dev \
libgpg-error-dev \
libostree-dev \
libprotobuf-dev \
libprotobuf-c-dev \
libseccomp-dev \
libselinux1-dev \
libsystemd-dev \
pkg-config \
runc \
uidmap \
libapparmor-dev
Step 3: Installing common
Common is used to monitor OCI run times on your Linux System. Install the latest version of common on Debian by cloning.
git clone https://github.com/containers/common
cd common
sudo make podman
sudo cp /usr/local/libexec/podman/common /usr/local/bin/
Step 4: Installing CNI Plugins
Make sure that the CNI Plugins are installed on your system. If they are not installed yet, Install them by typing
git clone https://github.com/containernetworking/plugins.git $GOPATH/src/github.com/containernetworking/plugins
cd $GOPATH/src/github.com/containernetworking/plugins
./build_linux.sh
sudo mkdir -p /usr/libexec/cni
sudo cp bin/* /usr/libexec/cni
Step 5: Setting Up CNI Networking
Now, add the configuration files by
sudo mkdir -p /etc/cni/net.d
curl -qsSL https://raw.githubusercontent.com/containers/libpod/master/cni/87-podman-bridge.conflist | sudo tee /etc/cni/net.d/99-loopback.conf
Step 6: Populate Config files
You have to manually add configuration files like registry and policy files.
sudo mkdir -p /etc/containers
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
Step 7: Installing Podman
After doing all the above requirements, its time to download and Install Podman on your system.
git clone https://github.com/containers/libpod/ $GOPATH/src/github.com/containers/libpod
cd $GOPATH/src/github.com/containers/libpod
make
sudo make install
You can run the command podman version to check the installed version of podman
$ podman info
host:
BuildahVersion: 1.9.2
Conmon:
package: Unknown
path: /usr/local/bin/conmon
version: 'conmon version 1.0.1-dev, commit: 8392df88fba944510b51c7d5b92aa745a15863f8'
Distribution:
distribution: debian
version: "10"
MemFree: 6179495936
MemTotal: 8167223296
OCIRuntime:
package: 'runc: /usr/sbin/runc'
path: /usr/sbin/runc
version: |-
runc version 1.0.0~rc6+dfsg1
commit: 1.0.0~rc6+dfsg1-3
spec: 1.0.1
SwapFree: 0
SwapTotal: 0
arch: amd64
cpus: 2
eventlogger: journald
hostname: debian10
kernel: 4.19.0-5-amd64
os: linux
rootless: false
uptime: 13m 44.64s
registries:
blocked: null
insecure: null
search:
docker.io
registry.fedoraproject.org
registry.access.redhat.com
store:
ConfigFile: /etc/containers/storage.conf
ContainerStore:
number: 0
GraphDriverName: overlay
GraphOptions: null
GraphRoot: /var/lib/containers/storage
GraphStatus:
Backing Filesystem: extfs
Native Overlay Diff: "true"
Supports d_type: "true"
Using metacopy: "false"
ImageStore:
number: 0
RunRoot: /var/run/containers/storage
VolumePath: /var/lib/containers/storage/volumes
Here are the main configuration files.
- /etc/containers/regestries.conf : We use this file to store the registries of domain or new container images.
- /etc/containers/mounts.conf: Keeps the record of mounted directories.
Step 8: Testing Podman Installation on Debian
Download the Alpine image by running
$ podman pull alpine
Trying to pull docker.io/library/alpine…
Getting image source signatures
Copying blob 050382585609 done
Copying config b7b28af77f done
Writing manifest to image destination
Storing signatures
b7b28af77ffec6054d13378df4fdf02725830086c7444d9c278af25312aa39b9
Run Docker Container
[root@localhost sabi]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/alpine latest b7b28af77ffe 3 weeks ago 5.85 MB
$ podman run -ti b7b28af77ffe /bin/sh
/ # cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.10.1
PRETTY_NAME="Alpine Linux v3.10"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/
/# exit
You can remove the container by running the below command
[root@localhost sabi]# podman rm -fpodman ps -aq
d16db8f39c82f50f3a2bbf4834d948b660525a5c2b98979e433c3428f613c18d
And that is it.