Recommended Audience: Anybody with an Infrastructure background
What to expect from this post: This will quickly prep for the discussion on Docker
Traditionally the physical servers have been used in the datacenters where the artifacts are installed on a physical server that has been installed with an Operating System, Java, Tomcat, or whatever applications and runtimes required for the enterprise application to function. Clearly, it has several disadvantages that have been identified and fixed in the form of virtualization (thanks to VMware!):
- Physical resource underutilization: too low (wastage of computing resources)
- Boot times: several minutes
- CapEx: Physical Hardware is expensive
- OpEx: Real estate, HVAC, Power, etc.
- Downtime
- No scalability
Virtualization has been the standard for several years and pretty much every cloud provider in the globe has been using it as their secret sauce. It has several benefits over physical servers including minimized or eliminated downtime, reduced CAPEX and OPEX costs, increased agility and scalability, faster provisioning of resources and applications through automation, simplified data center management, and greater business continuity, etc. However, with all the application modernization requirements and evolving DevOps, the industry started to identify the following disadvantages:
- Boot times: still a few minutes
- Dynamic resource allocation: not quite possible with VMs
- Scalability of the application: scale-out or scale-up
- Each VM still requires the OS
- Operational aspects of the OS: patching, licensing, etc.
Clearly, containers have been the choice for all the modern app development, due to several benefits including:
- Faster boot times: as there are only OS libraries that get loaded and not a full-blown OS
- Platform independence: run anywhere and isolation
- Dynamic resource allocation
- Extreme high scalability: starting 2 containers vs 100 containers take about the same time (2 seconds)
- Simplified management: as there is the minimal OS, no licensing, a single image update can update at n number of places, software versions can be updated just at one image
- Improved developer productivity and development pipeline management
Now, let’s think about putting Containers on VMs. This would be an ideal option as the existing power of VM infrastructure automation and security (especially secured orchestration (NIST), secured encrypted virtualization) can be combined to the agility, scalability, simplicity, and developer productivity that the containers bring.