The magical world of containers — benefits

Gabriele de Capoa
3 min readJun 29, 2021

--

Photo by Guillaume Bolduc on Unsplash

Anyone in my LinkedIn network knows last year I became a Certified Kubernetes Application Developer. After about 4 years working actively on Kubernetes day by day, this certification was a great recognition of my studies.
This is why I decided to start a new post series, describing what I’ve learned about containers and their use cases. Topics will be:

* Basic concepts
* Use cases
* Unix background
* Namespaces
* Control Groups
* chroot
* Implementations
* Docker
* containerd
* Docker commands
* Orchestration and Docker Swarm
* Kubernetes
* Architecture
* Objects
* CLI
* Cloud Foundry
* Architecture
* Application development
* CLI
* OpenShift
* Architecture
* Objects
* CLI

Before starting, I would add a caveat: this is what I understood after studying on books and on the job, but could include lots of misunderstanding, so please use those posts just a starting point to deepen your knowledge, starting your own learning roadmap (and eventually point me to the misunderstandings)!

Why one should adopt containers in his/her software architecture?
As said before, containers is a buzz word, but the technical stuffs behind this concepts have lots of benefits.

Agile application creation and deployment

Creating a container image is easier and more efficient compared to create a virtual machine template, even if some softwares like Vagrant or Terraform made easier virtual machine template’s creation.

Continuous development, integration, and deployment

Continuous Development, Continuous Integration and Continuous Deployment methodologies are simplified.
One could build frequently and reliably new container images with new software version and one could deploy new versions and perform, if needed, the rollback to previous version easily and quickly.

Dev and Ops separation of concerns

One could create application container images at build/release time rather than deployment time, thereby decoupling applications from infrastructure.

Environmental consistency

Runs the same on a laptop as it does in the cloud across development, testing and production environments, so this resolve the age old dilemma “ … but it works on my pc!

Image by Daniel Stori on turnoff.us

Cloud and OS distribution portability

Containers guarantees interoperability among operating systems and cloud providers. Thanks to its standard, same container images could run on Linux, on Mac OS X, on Windows (with some tricks), but also on Google Container Engine, IBM Cloud Kubernetes Engine, Amazon Elastic Kubernetes Service, etc.

Application-centric management

Containers help to raise the level of abstraction from running an OS on virtual hardware to run an application on an OS using logical resources.

Loosely coupled and distributed micro-services

As soon as containers became a buzz word, the microservice architectural pattern was defined. Thanks to containers, an application is broken into smaller, independent pieces and can be deployed and managed dynamically.

Resource isolation and utilisation improvement

Thanks to namespaces and jailing, resources allocated to a single container will be completely separated from the resources allocated to another container. In addition, namespace and jailing allows to define a threshold, improving also the utilisation rate for the resources.

Image by Daniel Stori on turnoff.us

Originally published at https://gabriele-decapoa.github.io.

--

--

Gabriele de Capoa

Cloud software engineer, wanna-be data scientist, former Scrum Master. Agile, DevOps, Kubernetes and SQL are my top topics.