How to manage Linux Containers using Podman
Here in this article we will try to install Podman an Open Source container management tool and see how we can utilize it to push, pull, inspect, start and stop containers.
Test Environment
Fedora 32
What is Podman
Podman is an opensource Linux native tool designed to make it easy to find, run, build, share and deploy applications using OCI containers and container Images. Unlike Docker which relies on Docker daemon for managing the containers, Podman is daemonless.
Podman relies on OCI compliant Container Runtime to interface with the operating system and create the running containers. Podman manages the entire container ecosystem which includes pods, containers, container images, container volumes using libpod library.
Podman service currently runs only on Linux platforms.
If you are interested in watching video. Here in the YouTube video on the same step by step procedure outlined below.
Procedure
Step1: Install Podman
In order to manager Linux containers we first need to install the Podman utlility on our Linxu OS. Installing Podman is as simple as shown below without the overhead of installing the client and server packages like we do for setting up Docker.
[admin@fed32 ~]$ sudo dnf install podman
[sudo] password for admin:
Last metadata expiration check: 0:27:40 ago on Fri 09 Oct 2020 05:45:43 AM IST.
Dependencies resolved.
=======================================================================================================================================
Package Architecture Version Repository Size
=======================================================================================================================================
Installing:
podman x86_64 2:2.1.1-7.fc32 updates 13 M
Installing dependencies:
conmon x86_64 2:2.0.21-2.fc32 updates 43 k
containernetworking-plugins x86_64 0.8.7-1.fc32 updates 11 M
containers-common x86_64 1:1.1.1-5.fc32 updates 66 k
crun x86_64 0.15-5.fc32 updates 187 k
fuse3 x86_64 3.9.1-1.fc32 fedora 55 k
fuse3-libs x86_64 3.9.1-1.fc32 fedora 93 k
libnet x86_64 1.1.6-19.fc32 fedora 64 k
libslirp x86_64 4.3.1-1.fc32 updates 70 k
...
Installed:
catatonit-0.1.5-3.fc32.x86_64 conmon-2:2.0.21-2.fc32.x86_64 container-selinux-2:2.145.0-1.fc32.noarch
containernetworking-plugins-0.8.7-1.fc32.x86_64 containers-common-1:1.1.1-5.fc32.x86_64 criu-3.14-1.fc32.x86_64
crun-0.15-5.fc32.x86_64 fuse-overlayfs-1.1.2-1.fc32.x86_64 fuse3-3.9.1-1.fc32.x86_64
fuse3-libs-3.9.1-1.fc32.x86_64 libnet-1.1.6-19.fc32.x86_64 libslirp-4.3.1-1.fc32.x86_64
libvarlink-util-18-3.fc32.x86_64 podman-2:2.1.1-7.fc32.x86_64 podman-plugins-2:2.1.1-7.fc32.x86_64
runc-2:1.0.0-144.dev.gite6555cc.fc32.x86_64 slirp4netns-1.1.4-1.fc32.x86_64
Complete!
The installation of Podman also installs some important dependencies along with it. Lets get into some of the details of these package that got installed.
- conmon – It is a automated container based network performance monitoring system. Its helps in configuring and executing the monitoring functions inside the adjacent monitoring containers.
- containernetworking-plugins – It provides a set of network plugins to configure network interfaces for Linux containers.
- containers-common – This package installs the default set of configuration files for working with image signatures. It contains configuration files related to registries from where the images are downloaded and storage driver information like storage driver used and where the downloaded images are stored locally.
- crun – Its a fast and low memory footprint OCI container runtime fully written in C.
- fuse3 and fuse3-libs – These packages help to implement a fully functional filesystem in a userspace program.
- libnet – Its an API to help with the construction and injection of packets.
- libslirp – Its a general purpose TCP-IP emulator used by virtual machine hypervisors to provide virtual networking services. It is a user-mode networking library used by virtual machines, containers or various tools.
Now that we have some basic understanding about what is Podman and its dependent packages do. Let try to use Podman and see how we can use it to manage Linux containers in the step by step procedure below.
Step2: Search for Tomcat container image
Here let try to search for Tomcat container which is an official image available.
[admin@fed32 ~]$ podman search tomcat --filter=is-official
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/library/tomcat Apache Tomcat is an open source implementati... 2846 [OK]
docker.io docker.io/library/tomee Apache TomEE is an all-Apache Java EE certif... 83 [OK]
The above search show two images from which we are interested in the tomcat container image. The second one is Tomcat Enterprise edition images providing a Java EE compliant Application server.
Step3: Pull an image from registry
Let’s try to pull the tomcat image that we searched in the Step1 and check where the images are getting stored locally once downloaded.
[admin@fed32 ~]$ podman pull docker.io/library/tomcat
Trying to pull docker.io/library/tomcat...
Getting image source signatures
Copying blob 57df1a1f1ad8 done
Copying blob 71e126169501 done
Copying blob 1af28a55c3f3 done
Copying blob 881ad7aafb13 done
Copying blob 9c0ffd4062f3 done
Copying blob 03f1c9932170 done
Copying blob bd62e479351a [======================================] 187.2MiB / 187.2MiB
Copying blob 48ee8bc64dbc done
Copying blob 07cb85cca4f0 done
Copying blob 6a78fac8d191 done
Copying config f796d3d2c1 done
Writing manifest to image destination
Storing signatures
f796d3d2c1954864eae249749f0a17480fb446c22053f4451e2c3514c561638b
We can list the images that are currently available for us to use with the below command.
[admin@fed32 ~]$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/tomcat latest f796d3d2c195 3 weeks ago 660 MB
By default these images are getting stored in /.local/share/containers/storage/ as we using the Podman with a non root user.
Step4: Run a container based on Tomcat image downloaded
Here we have instantiated a container for the tomcat image and exposed the port 8080 of the tomcat container on port 8080 of localhost using port forwarding. The list of all containers that are available can be shown using ps -a option for podman.
[admin@fed32 ~]$ podman run -dt -p 8080:8080/tcp docker.io/library/tomcat
14e4cde6e6fa4432a94ad69936b813b8e72e6054199e37d2487c4c416a8d5e39
[admin@fed32 ~]$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14e4cde6e6fa docker.io/library/tomcat:latest catalina.sh run 9 seconds ago Up 7 seconds ago 0.0.0.0:8080->8080/tcp admiring_lumiere
Step5: Inspect the container
Tomcat running container can be inspected for its metadata and other details. Inspect will provide a lot of information related to your container environment variables, network setting and allocated resources.
Here are some of the metadata information which i tried to grep or collect from the inspect data.
[admin@fed32 ~]$ podman inspect 14e4cde6e6fa | grep -i ipaddress
"IPAddress": "",
[admin@fed32 ~]$ podman inspect 14e4cde6e6fa | grep -i "hostname="
"HOSTNAME=14e4cde6e6fa",
[admin@fed32 ~]$ podman inspect 14e4cde6e6fa | grep -i "Port"
"Ports": {
"HostPort": "8080"
"PortBindings": {
"HostPort": "8080"
[admin@fed32 ~]$ podman inspect 14e4cde6e6fa | grep -i "workingdir"
"WorkingDir": "/usr/local/tomcat",
[admin@fed32 ~]$ podman inspect 14e4cde6e6fa | grep -i "tomcat_version"
"TOMCAT_VERSION=9.0.38",
[admin@fed32 ~]$ podman inspect 14e4cde6e6fa | grep -i "java_version"
"JAVA_VERSION=11.0.8",
Step6: Viewing the tomcat container logs
The logs related to the container can be monitored using podman logs with various options to tail the logs. It also supports for multiple container logs to be shown.
[admin@fed32 ~]$ podman logs 14e4cde6e6fa | grep -i "Server startup"
09-Oct-2020 17:31:59.023 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [544] milliseconds
Step7: Stop and Start the containers
Podman also helps in stopping and starting the containers as shown below.
[admin@fed32 ~]$ podman stop 14e4cde6e6fa
14e4cde6e6fa4432a94ad69936b813b8e72e6054199e37d2487c4c416a8d5e39
[admin@fed32 ~]$ podman start 14e4cde6e6fa
14e4cde6e6fa
Step8: Stop and Remove the container
Here we stop the container id that we instantiated and remove the container id permanently.
[admin@fed32 ~]$ podman stop 14e4cde6e6fa
14e4cde6e6fa4432a94ad69936b813b8e72e6054199e37d2487c4c416a8d5e39
[admin@fed32 ~]$ podman rm 14e4cde6e6fa
14e4cde6e6fa4432a94ad69936b813b8e72e6054199e37d2487c4c416a8d5e39
Hope you enjoyed reading this article. Thank you..
Leave a Reply
You must be logged in to post a comment.