Last time we talked about the definition of DevOps and why DevOps is different in Public cloud services like AWS. Next in this series “DevOps is different! How can containers help?“ we talk about containers and why they have many benefits in the public cloud.
What is a container?
Consider the diagram below. On the left, you have a traditional virtualization model using virtual machines (VMs) with a hypervisor running an OS on a server (Dell, HP, etc.).
On the right, you have a much lightweight virtualization infrastructure. The containers are sharing a lot of the OS in the guest. This is a lot more resource efficient.
As a result, the way you define a container - with a container image - is a lot smaller than a VM image. You are packing up just the necessary libraries and binaries to run the application and not the entire OS.
Because each container is packaged with its own custom execution environment, it will run the same on a developer laptop as in production.
This level of portability is extremely valuable! Or at least that is the promise - but as with any fast moving technology, it can be hard to do easily and reliably in practice.
How do containers help with DevOps in the public cloud?
Containers provide lightweight virtualization. Containers are how leading technology companies like Google and Facebook have been squeezing agility and efficiency from their private clouds for over a decade. Containers enable them to deploy multiple times per day and get 80% utilization of their massive clouds.
Compare that with a typical on-prem cloud utilization of 25-35%, which is what you get if you lift-and-shift your VMs from on-prem to the cloud without using containers. This is one of the causes of AWS sticker shock!
When lift-and-shift VMs to the cloud, you are essentially de-virtualizing the infrastructure you spent so much time virtualizing in the first place! You are turning each elastic VM back into a fixed slice of a physical server.
Containers provide very high portability and efficiency. It’s ideal for DevOps in dynamic environments like the public cloud where instances can come and go on demand, and you can use marketplace based instruments like spot instances.
By leveraging containers and micro-services, you can dynamically scale your application to match the load and pack a lot more work onto a single instance.
You can also track metrics at a much more granular level than a server or VM. You can do monitoring and perform analytics at a job or app level, which is far more relevant to your business.
And that is the goal of DevOps - not only you are delivering software and fixing bugs faster, you are solving more problems that are relevant to your business!
For all these reasons above, we think containers and the public cloud go together like Peanut Butter and Jelly!
Next time we'll get into how we got our own battle scars - obstacles encountered and lessons learned in working with containers in AWS.