There's a lot of noise about containers nowadays. In the last few years, Docker and Kubernetes have taken the world by storm.
Containers have played a major role in the changing IT landscape. In fact, they are one of the key components of CI/CD and DevOps. With containers, you can re-use existing infrastructure and deploy applications quickly and automatically. This is especially important when deploying microservices-based architectures, which often involve many individual services that must be deployed individually onto separate servers or virtual machines (VMs). Containers help solve this problem by providing a way to deploy multiple instances of an application as a single unit—without relying on a VM or other infrastructure resource provisioning tools
What is a Container?
A container is an isolated and secure runtime environment for applications that allows them to run "anywhere" (i.e., on any computer). Containers are a lot like virtual machines: they virtualise the hardware resources of the underlying host machine, so you can run more than one application at once on one physical server.
However, there are some key differences between virtual machines and containers. Firstly, containers typically use less RAM than full-blown VMs because only the bare minimum resources needed for running an app are allocated to a given container instance (e.g., disk space, CPU cores). Secondly, unlike hypervisors which connect multiple operating systems together in order to provide isolation between them (e.g., VMWare ESXi), containers rely on Linux kernel features such as namespaces and cgroups without requiring additional software like hypervisors do; this makes containers much lighter weight than hypervisors
A Bit of History
Being able to boast I was one for the the first people to be using Hadoop on the cloud and Docker (Alpha) in production settings for enterprise around a decade ago. I think it's safe to say that none of this technology is exactly, new!
LXC (Linux Containers) or chroot jails have existed for the longest time, although, not widely used owing to complexity. Maybe it took the DevOps Movement to make someone look at this old technology and find an easier way to consume it?
Even since those days we have seen newer technologies in this space pop up, Kubenetes throws an new flavour of Virtualisation into the mix and has a totally different array of tools for using the feature wish virtualisation platform and even the Cloud platforms rushing to create a platform to run your applications easily inside, who knows what exciting things the future will hold in this space!
But what do containers do for me?
Containers offer a quick, clean and easy way to deploy individual application components as self-contained units, in isolation from other parts of an IT environment. This has become especially valuable as organisations embrace DevOps philosophies and move toward continuous integration and continuous delivery (CI/CD), which ensures changes to one component (such as the application code) are tested and deployed quickly and independently of other components (such as networking, storage or the base operating system).
As well as this Containers are very lightweight, portable and easy to use. They are a great way to package and deploy applications. Containers aren't the same thing as virtual machines (VMs), though they can be used in conjunction with VMs. Unlike VMs, which create an entire operating system (OS), containers only require an OS kernel and the application software needed by the service. This has two major benefits for you:
You don't need a large amount of RAM or processing power because there's no need for lengthy OS boot-up times;
There's no need for lengthy OS boot-ups, you'll have faster start times when launching your containerised services!
How do containers fit into DevOps
Or should that be, How does DevOps fit into a container? ...Don't worry! I am not giving up the day job!
A central tenet of CI/CD is infrastructure automation, which allows resources to be re-created easily, on demand. Containers fit perfectly into this model, because they can be created dynamically, whenever needed, and then discarded as soon as their task is complete.
Adoption Requirements
To take advantage of containers, you only need two things:
- A container engine that runs container images on your servers
- some container images that are ready-made with everything you need installed inside them.
Wrap up!
Despite the wide adoption of this technology build upon the cloud, there are still a number of pitfalls with this technology.
Security is still a big issue and we are constantly seeing flaws requiring patching or upgrade, I predict we will see more across all attack vectors, from the supply chain upwards.
Longevity is also yet to be proven with the constant flux in changes to meet user requirements (demands!) as well as security and business needs, there hasn't been a period of stability in which to write the lexicon in full for everyone. This leads to a lot of ambiguity when attempting to write a Unified Cloud Theory for all platforms which business tend to look for when going "Multi-Cloud".