In a previous “How to Converse in Cloud” post, we discussed the differences between virtualization and the private cloud. In this blog, we’re going to look at the similarities and differences between containers and virtual machines as DevOps tools for the cloud.
Among the enterprises surveyed in the RightScale “2016 State of the Cloud” report, containers are picking up steam. Open source container pioneer Docker, doubled its current installed base to 29% year-over-year, with another 38% of enterprises saying they plan to use it in the future. Cloud giants Amazon Web Services, Microsoft Azure and Google Cloud Platform have also entered the market offering container services based on open source tools, including Docker, DC/OS or Kubernetes.
Virtual machine and container software
VM and container software have many similarities (as illustrated in the diagram below) and they can be used together or separately.
Source: Big Switch Networks
However, how they are deployed and managed differ significantly.
Virtual machine software
Virtual machine software, also known as a “hypervisor,” is a technology that has been in use for well over 50 years. VMs make it possible for an entire computing environment to be encapsulated and executed together with others on a single host. Each VM contains a guest operating system, applications, data and networking software. This means it’s possible for workloads executing under different operating systems or different operating system versions to run on the same host, isolated from one another. Many of today’s workloads are built to execute inside of VMs and can reside on machines locally or in the cloud.
Containers also can encapsulate applications. However, they do it at a different level than VMs. Containers live on top of a single operating system, rather than underneath one, and share resources among a number of applications. This approach expects that all applications are designed to work with that single operating system. The benefits are: reduced requirements for memory, storage and a decrease in the time it takes to create (or destroy) a new instantiation.
These two approaches to virtualizing processing have different ramifications. VMs offer a single file system per VM while containers, residing on a single operating system, share a single file system. So, data sharing between and among containers can be faster for applications than VMs. Another difference is the time it takes to create a new instance. Creating a new VM can take many seconds, while creating a new container typically can be done in less than a second.
Containers also create a much denser computing environment. For example, 25 VMs per system and 40 systems per rack mean that as many as 1,000 VMs could be executing per rack in a data center. Containers, on the other hand, could support up to 10,000 containers in that same rack.
Interconnection is the core of cloud application deployment
These two virtualized application development approaches also have a very different impact on data center networks: VMs typically work with a single vSwitch while containers can work with single or nested vSwitches. This means that an application composed of multiple “containerized” components could impose a greater load on the network and make it more difficult for administrators to monitor the environment.
Enterprise-class container deployments and VMs require a simple, automated, easy-to-manage level of interconnection that can operate at the speed of these virtualized tools and services. Unfortunately many legacy network infrastructures are not currently set up to provide it. Direct and secure, virtualized connections, such as with the Equinix Cloud Exchange, enable fast provisioning of connectivity to multiple cloud services, equipping application developers with faster and more cost-effective access to clouds for application development, testing and deployment.
Containers as the new atomic unit of application development and deployment
The growing interest in container technology for cloud-based applications is based on its ability to enable developers to segment applications into separate “microservices” that execute in separate containers, instead of creating monolithic application architectures, as is often done using VMs. Containers can also be deployed on a single system or distributed systems, offering greater flexibility and agility.
As enterprises seek new ways to streamline the development and deployment of multiple applications in and out of the cloud, the idea of being able to quickly create, test and deploy a greater number of application microservices on multiple systems, without putting greater stress on system resources, has a great deal of appeal.
Read the “Forrester Total Economic Impact™ of Equinix Interconnection Solutions,” to find out how deploying an interconnected cloud infrastructure on Platform Equinix can help you gain greater efficiency in any application development environment (virtualized or otherwise).