Introduction to Application Containerization
I tend to think of software in terms of how it makes my life easier, or solve the business requirements of my clients. I take it for a given that wherever the application is hosted, it will be done so efficiently and will take advantage of elastic load balancing and other tools to keep the software running even under peak usage.
What I gloss over as a given is very important, especially as bitHeads builds more cloud based web and mobile applications. Infrastructure as a Service is the default choice for our clients’ new applications; we either move their legacy apps to the cloud, or integrate those apps intelligently such that newer applications have access to critical data. IaaS solutions like Amazon Web Services and Azure have typically used virtual machines to distribute application computing. Virtualization changed the IT landscape; improving energy use, space efficiency, disaster recovery, up time and greatly speeding up provisioning.
However, this paradigm is evolving as more developers and enterprises adoptContainerization to improve the performance of their applications on a virtualized infrastructure.
How is Containerization different?
In essence, virtualization of the data centre (this spelling is ok, I’m Canadian eh) sped up all the processes necessary to keep applications running, and doing so more efficiently. IaaS commoditized this process further, and makes adding more capacity (elastically) and failsafes much simpler. My CTO can set up the backend for high traffic applications from the comfort of his home office.
Virtual Machines on an IaaS platform:
The server has its own base OS, with a hypervisor, which can then create VMs. Each VM has its own OS, bins, libraries, dependencies, etc… to run its application.
Containers with Docker on an IaaS platform
In contrast with a VM, containers are extremely lightweight. They share the operating system of the server they are deployed on, and only have the libraries and bins they need to operate.
There are different configurations, and, in fact, containers can be run ‘bare metal’, which means they can be deployed on a server without a host OS. I’m not going to lie, I’m a sales guy and a discussion on why you may want to do that, or not, is beyond me
However, just by sharing the host OS of the server, each container is much smaller and more efficient than its virtual machine equivalent. A bitHeads senior developer said he can set them up with a small text file, rather than a multi-gigabyte disk image for a VM.
Who is innovating in the Containers space:
- Docker Makes deploying containers simple and accessible.
- CoreOS Provides infrastructure to clustered deployments of containerized applications
- CentOS Stable linux platform
- Rkt A container engine by CoreOS
- Spoon/Turbo.net Allows Windows applications to be containerized and streamed, not open source.
- Drawbridge A Microsoft initiative that allows for application sandboxing
Who is using it?
Containerization is not just for the avant garde development power houses, like bitHeads. Some well known enterprises are organizing their applications this way, including:
Want to learn more?
If this wasn’t technical enough for you, reach out, I’d be happy to share the slides a senior bitHeads’ developer created on the topic. Perhaps he can answer your questions as well.