Background

In general, a typical software applications are dependent on other 3rd party libraries, components, services or config that are running in the host or environment. A traditional application may break if there are new updates on its dependencies that are not supported by the application when it was written.

For example, you have a windows application that is deployed on a windwows server that is dependent on a TLS 1.0 protocol. A windows update was delivered by the system administrator that updates the TLS to a newer version. The application written years ago may or may not break, but as an experience developers, we never take that risks. This will force our system administrator to postpone the windows update until such time that our dev team tested this application with the newer TLS version.

And there comes container

Introduction to Container

A container is a light weight, more agile of handling virtualization. Container produce the same purpose of a virtual machine. Container creates an isolated environment. OS changes or updates will not affect the container. All the dependencies inside a container are self sustained. Furthermore, an update to another container’s libraries will not affect other containers.

Container is easier to deploy compare to the traditional physical host. When you have an update to your VM, sometimes a full reboot is required for the updates to take effect. A quick container restart does not require for a full host reboot.

Another advantage of a containerized application is that your application is reusable. You don’t need full libraries on a physical host to transfer your containerized application to another host. All services or components can be made to run on a single container image, thus making deployment quick and easy.

Disadvantages of Containerized application

  • Container is not always right - different tasks require different approach. Containers are usually suited for microservices applications. Some applications are just suited for monolithic approach. They are designed that way.
  • Security complexity - another disadvantage of containerized application is its security. Compare to a traditional physical host, containers need multi-level security because they have multi level layers.
  • Data storage - The complexity of persistent container data storage becomes much complex. There are some challenges to saved/persist data inside a container, but as the stack mature, these challenges are more and more easily resolve.

Furthermore, container’s advantages totally outweigh its disadvantages.

The main catch here is to be familiar with the complexities before deciding whether to migrate to containers or not.

Podman

Podman is an open-source tool for managing containers and images. Podman is a command line interface (CLI). If you are much familiar with Docker, you can use so. Podman and Docker follow the same command patterns so its easy to learn each tool side by side.

If you are new to containers, I recommend you to checkout Podman introduction and documentation to its official site.

We are going to use Podman when we interact to our Kubernetes containers. More to that later.