The magical world of containers — benefits
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! “
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.
Originally published at https://gabriele-decapoa.github.io.