January 2nd, 2021
In today's post, I'll try to briefly explain what is a container, why we might use them, and a brief explanation about some tools that are often heard when you get into a discussion about containers.
Containers are basically sandboxes for your applications. But what does it mean to put your application in a sandbox? Containers isolate a process to run on a host operating system, but unlike the VMs(Virtual Machines) containers do not have their own kernel and services. Containers just contain the (ideally) bare minimum of what you need for running your application.
Docker is one of a few names that come to mind when someone said containers, their definition of containers is like that:
"A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries, and settings."
When it comes to containers people often think about specific popular applications like microservices and some others. But today I'll only cover the use of the containers in a more generalized manner.
Start Time: Containers are often so quick when it comes to booting if we compare them with VMs. It's actually quite predictable given they don't even have their kernel or services. Only what they need to run a specific application.
Isolation: Even though containers use host OS's resources they are totally isolated from the host operating system. For most cases and for most developers this feature is quite valuable. A container just creates an isolated environment with only what it needs to run an application and does that in total independence from the host. Isolation also provides practically perfect security, yet they are not recognized as secure as VMs, it also makes sense given that "escaping from container" type of vulnerabilities happened in the past.
Easy Install and easy removal: Compare to running an application on a VM or a local device both running and removing container-based applications are much easier. Containers work platform-independent and no matter what happens inside a container when a container is removed or stopped gets terminated immediately. Given how much overhead comes with a local or VM based launch, this feature is one of the most valuable sides of a container.
Code Reuse: As I mentioned earlier, containers work isolated and platform-independent all the container-based applications can work with the same code base when being moved from one machine to another.
I'll just mention some of the most popular container related products here.
Docker is the most popular container technology and can be considered as the pioneer of the container revolution. Docker is a container runtime with its opensource containerization engine.
containerd is a container run time provided by Cloud Native Computing Foundation.
From the official documentation:
"Kubernetes is a portable, extensible, open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available."
I'll go a deeper dive into container-related tehchnologies in the future.
That's the end of today's blog post. I'll see you in the future posts, take care of yourselves :)