Hello everyone and welcome back to the Cognixia podcast. Every week we discuss a new topic in our episodes to help our audience learn something new and we are loving all the feedback and suggestions we are getting from you. One such email we received from our listener was about Containerization. This listener felt quite overwhelmed with all the complex terms that exist in Demystifying containerization, and we realized that there would be many individuals out there who could benefit from a little demystifying of some important terms in the field of containerization, Kubernetes, etc. So, that’s what we will do in today’s episode – Demystifying Containerization. And what better way to begin than by talking about what is containerization.
What is Containerization?
The simplest way we can put it is that Containerization is the building of applications using containers. This begs the question – What are containers?
Containers are the solution to the constant challenge developers face of getting the software to run reliably when it is moved from one computing environment to another, say from the developer’s desktop to a testing environment, or from a staging environment to a production environment, or even from a physical machine in a data center to a virtual machine on the cloud.
Now, containerization is the packaging of the software code along with all the other components it needs, like the libraries, frameworks, etc. isolated in a parcel or a container. Again, simply put, using containers to develop and build and manage an application is called containerization. When you get into Demystifying containerization, the containers can be easily and consistently moved and run in any environment and any infrastructure.
We just mentioned the Virtual Machines. So,
what is a Virtual Machine?
A virtual machine is a virtual environment that functions as a virtual computer system having its CPU, memory, network interface, and storage. The virtual machine is a system that is created on a physical hardware system, though it could be located on-premise or otherwise.
Are containerization and virtualization the same?
Well, no. Containerization and virtualization are two different processes but they have some similarities. Containerization and Virtualization both enable total isolation of applications to help them be operational in multiple environments. The key differences between containerization and virtualization lie in the size and the probabilities they deal with. Virtual machines are much larger than containers, running into gigabytes, while containers are much smaller running into megabytes. While virtual machines work very well with traditional monolithic architectures, containers are more suitable when working with emerging technologies like cloud platforms, CI/CD pipelines, DevOps, Agile, etc.
When talking about containers, one term that always crops up in discussions is microservices. So, what are microservices?
Simply put, microservices are an architectural approach to building applications. Microservices are distributed and loosely coupled so if changes happen in one area or one team’s work, the whole application does not get affected by it. The key reason why microservices are immensely popular is that it enables development teams to rapidly build new components of applications to meet the evolving business needs.
Microservices work very well with containers. When one deploys a microservice inside a container, it gives them portability, compatibility, and scalability of a container with the advantages of using microservices as well.
The next heavy term that we have on our list is ‘container orchestration’.
What is container orchestration?
Once we have built all the containers, how do you go about managing them? This is accomplished by the process of container orchestration. If you are looking for a better understanding of what container orchestration is, we would say container orchestration is the automation of the deployment, management, scaling, and network of containers.
Now, how do you go about performing or accomplishing container orchestration?
There are multiple tools and platforms you can use for performing or accomplishing the container orchestration process. However, the most popular platform or tool for container orchestration is Kubernetes.
What is Kubernetes?
Kubernetes is an open-source container orchestration platform that helps manage distributed containerized applications at large scales. It is, hands-down, the most popular tool for container orchestration in the world, usually the number one choice for most developers.
Another very important term related to containers is a container image. A container image is a file that is pulled down from a Registry Server when starting a container and then used locally as a mount point. Sometimes, when one uses the term container image, they mean a Repository, which would mean a bundle of multiple layers of container images along with the metadata that would provide more information about the container image layers.
You can’t talk about container images and not talk about container image formats.
Simply put, a container image format is the format of the container image. Initially, every container engine used to have its unique container image format. However, now most container tools and container engines have moved to standard formats that are defined by the Open Container Initiative or the OCI, which would define the image layers and the metadata that provides information about the container image.
Now that we have mentioned the Container Engine, let us demystify what is a container engine as well. A container engine is software that takes requests from the users like command-line options, image requests, etc., and then runs the containers from the end-user’s perspective. Popular examples of container engines include Docker, RKT, CRI-O, LXD, etc.
One more term we want to shed some light on is Container Runtime. A container runtime is a low-level component that is used in a container engine. It can also be used for testing. Container runtimes consume the container mount point and the container metadata that is provided by the container engine. It also communicates with the kernel to start the containerized processes. There are a few other functions also served by the container runtime like setting up groups, SELinux policies, App Armor rules, etc.
While there are a lot of other terms that we could highlight and discuss, we will end our discussion here today. We have gone over some of the most important terms in the Demystifying containerization space and we hope this helps you in some way. One tip we would like to share with everybody who finds the terms overwhelming and maybe even intimidating, is that, dig deeper. Just because a book or a page or even a person said this is what a particular team means and you don’t immediately understand it, dig deeper. Look for more information. We highly recommend trying to understand more about what the term is all about – what it is, how it functions, what it does, where it exists, etc. And most importantly, ask questions. Never be shy to ask questions. The more questions you ask, the more you will understand. There is no such thing as a stupid question, so go ahead, ask questions. And, keep sending us your questions, we will try our best to take them up in our podcast and help out!
On that note, we would like to tell you about our Docker and Kubernetes training that covers all the important aspects of working with containers, and focuses on the two most popular tools for working with containers – Docker and Kubernetes. It is 100% online, live, and instructor-led, the sessions take place over the weekends and are delivered by highly experienced instructors. So, if you are looking to sharpen your skills in this domain, do talk to us, and we would be happy to share the details of this training or any other training we have, with you.
With that, we come to the end of this week’s podcast. See you again next week. Stay safe and happy learning!