One of the purpose of a IT Department is to enable the organization to utilize technology to support business and to run business systems. Virtualization offers faster time to marked then physical servers and with the introduction of containers this can be even faster.
Both Containers and VM (Virtual Machines – from traditional virtualization) have the goal to isolate an application and its dependencies into a self-contained environment, that can run anywhere.
Containerization allow multiple distributed applications running in each of their own container to utilize one single OS Kernel. It is virtualization taken another step from several OS using one hardware.
The concept is however not new. Solaris Zones, BSD Jails, and LXC have been around for years. What has changed in the last few years is the increased usability of the systems. The by far most popular container systems out there today are Docker and Kubernetes. In addition Enterprise vendor Red Hat has their own system OpenShift.
The Benefits of Containers for Enterprises
One technology – many platforms: Containers run well in the Cloud, on virtualization environments, physical servers, Virtual environments on laptops etc. It allows organizations more flexibility. The Container Mantra is “build once, run anywhere”
Lightweight: Since the footprint of a container is as lightweight it allows developers to work with them on their computers, then move it to test and later production environments. Container technology ensures consistency no matter the environment. They support the concepts of DevOps, once you have created a container it can be reused with other containers wherever and whenever needed.
Version Control: The Technology has version controlling built in, which allows developers to roll back to previous versions if needed.
Marketplace: The largest Container technologies have their own resources of “app stores” that house an ever increasing amount of already produced images.
Isolation: In the container the applications are isolated from each other and from the OS. Many containers share one OS, and can also share resources from other containers.
Scalability: Container technology makes it easy to break out application’s functionality into in individual containers. For example, you can have a PostgreSQL database running in one container, Node.js app in another and Redis server in another again. The modular nature of Containers make it easier to scale resources and update components independently.
Speed: Since containers are very lightweight they are faster to use then traditional virtualization. Containers are utilizing the container technologies kernel and take up very few resources, which enables them to be deployed within seconds. A VM on the other hand requires the startup of the full OS for every redeploy.
Reproducibility: Containers is a devops friendly approach because of the benefit of reproducibility. The components stay static from code to deployment. The container image can be reproduced in other containers and reused as needed.
Pain Points of Containerization
Skilled Resources: Enterprises have already challenges getting the smartest people to work and stay within their organizations. This is a rather new technology and the amount of experts is limited. The technology being so young keep a fast change speed. The skill sets needed are different for Operations, Architects, Security and developers then more traditional virtualization technology.
Fast evolving technology: The ecosystem of Containers is evolving very fast. The nature of groundbreaking open source technology with huge amount of potential makes it hard to define the path. New tools and new technologies emerge all the time.
The big shift: Working with containers means that all work will have to happen in code. It requires the Enterprise to adapt Agile Methodology and DevOps work methodology. CI & CD models have to be built to be able to succeed. Change Management of the Enterprise will have to be changed to accompany for the new mindset. The way Operations teams addresses troubleshooting has to be changed to finding the error in the code and redeploy systems.
Container Monitoring: The Container technology creates multiple of their own networks only existing within the platform, each container is lightweight and monitoring systems would easily impact performance, synchronization happens within the platform between controllers, etc. Goes back to the skill point, even if you are able to find devs and ops that work with this monitoring is another challenge.
Security: Container technologies are often introduced through the dev communities where the focus is on the user friendliness, speed and not necessary on the security aspects of the technology. Container technologies can be run secure, but requires again skill to totally understand the Linux components, the user levels and impacts and how the containerization technology uses all parts. Encryption, secure access, patch level, and governance are important key words.
Run Containers
Running Container Technology requires the business to take an active step and invest. It brings new challenges and also new opportunities.