Getting started with Podman
In this tutorial, we will install Podman on an Ubuntu 24.04 server and run qube-server which is a tiny web server used for testing purposes.

Prerequisites
You will need an Ubuntu 24.04 virtual or bare-metal server for this tutorial. If you do not have access to a virtual or bare-metal server, you can quickly run an Ubuntu virtual server on your laptop with Multipass.
Outline
- What is Podman
 - Install Podman
 - Run qube-server on Podman
 - Test qube-server with curl
 - Pause and unpause container
 - Print container logs
 - Stop and remove containers
 - List the images
 - Wrapping up
 
What is Podman
Podman is an open-source tool for building and running containers. Unlike Docker, Podman is daemonless so it is less resource-intensive than Docker.
Podman is production-ready and is an alternative to Docker for running your containerized workloads.
Install Podman
Log in to the Ubuntu server and install Podman with Ubuntu package manager.
$ sudo apt-get update
$ sudo apt-get install podman
The podman package is available on Ubuntu versions later than 20.04. If you are using an older Ubuntu version, you can install Podman by compiling from source.
Run qube-server on Podman
Run qube-server.
$ podman run --name qube_server -p 8080:8080/tcp -dt docker.io/cloudqubes/qube-server:1.0.1
Flags and parameters used in the run command:
-p: Publish container port8080to port8080on the host (Ubuntu server).-d: Run the container in background.-t: Assign a pseudo-TTY toqube-serverso we can log in to the container via SSH if required for debugging etc.docker.io/cloudqubes/qube-server:1.0.1: The URL to pull the container.
List running containers:
$ podman ps
CONTAINER ID  IMAGE                                   COMMAND     CREATED        STATUS        PORTS                   NAMES
f4f4ee1e0a4f  docker.io/cloudqubes/qube-server:1.0.1              7 seconds ago  Up 7 seconds  0.0.0.0:8080->8080/tcp  qube_server
Test qube-server with curl
Test qube-server root path:
$ curl http://127.0.0.1:8080
Hello cloud
Test the /count path:
$ curl http://127.0.0.1:8080/count
Count: 1
$ curl http://127.0.0.1:8080/count
Count: 2
The first request to the /count initializes a counter which increments at each subsequent request to the /count path.
Check out what happens to the counter as we pause and unpause the container next.
Pause and unpause container
Pause container:
$ podman pause <container_id>
List all containers including paused:
$ podman ps -a
CONTAINER ID  IMAGE                                   COMMAND     CREATED         STATUS      PORTS                   NAMES
f4f4ee1e0a4f  docker.io/cloudqubes/qube-server:1.0.1              43 minutes ago  Paused      0.0.0.0:8080->8080/tcp  qube_server
Unpause container:
$ podman unpause <container_id>
Send new request to the /count path:
$ curl http://127.0.0.1:8080/count
Count: 3
We can see that a paused container retains its memory since the /count returns 3 continuing the counter started before the container is paused.
Print container logs
$ podman logs <container_id>
The container_id is the first field in the output of the podman ps command.
Stop and remove containers
Stop the qube-server container:
$ podman stop <container_id>
List stopped containers:
$ podman ps -a
CONTAINER ID  IMAGE                                   COMMAND     CREATED         STATUS                     PORTS                   NAMES
f4f4ee1e0a4f  docker.io/cloudqubes/qube-server:1.0.1              51 minutes ago  Exited (2) 41 seconds ago  0.0.0.0:8080->8080/tcp  qube_server
Stopping does not remove the container, so we must explicitly remove:
$ podman rm <container_id>
List the images
List the cached images:
$ podman images
REPOSITORY                        TAG         IMAGE ID      CREATED       SIZE
docker.io/cloudqubes/qube-server  1.0.1       65ecceaf2ddf  10 hours ago  4.59 MB
Podman has cached the qube-server image so it does not have to download image if we are to run qube-server again.
Wrapping up
In this tutorial, we installed Podman and deployed qube-server web server on Podman.
Podman is production ready so you can use it as an alternative to Docker for running containerized applications in production.
Podman commands and functions are quite similar to Docker. So your learning curve for switching from Docker to Podman will be pretty smooth. But there are many differences as well.
We will delve into these differences between Podmand and Docker in an upcoming article.