With the arrival of Docker Containers and Kubernetes from Google, there is a question; Virtual Machines vs Containers. What is the difference and what is the best option for organizations?
Docker has been known as the new technology that uses/creates containers, but containers are here since the 70s. However, containers started to be used as we know, around 10 years with Linux in LXC Containers type. Years back FreeBSD and AIX were already offering containers.
In these days of cloud environments growth, containers are getting more relevant and essential. Containers area are also getting more popular for users and companies.
Companies like AWS, Azure and Google Cloud platform have given the container technology a better view and usage.
The relevance of containers is mostly because of the work from the company Docker and today containers are spread around but were Docker that had a significant push on how to use it, and how to use as a replacement of virtual machines.
So what are the differences between Virtual Machines and Containers?
Virtual Machines and Containers use operation system resource in a different way and a different level of the virtualization layer.
Virtual Machines and Containers are similar, but they work differently when using the virtualization layer and the operating system.
What is a Virtual Machine?
A Virtual Machine is a software computer like a physical computer, that runs an operating system and applications.
Virtual Machines exists since Virtualization arrives at technology and are around for decades. Virtual Machines did not change too much since the first version. Had many improvements along the way, better virtual hardware, better drivers and more supported Guest OS, but is essentially is the same as initially was built.
One of the most significant advantages of a virtual machine is that it can be resized at any time (even hot-add) depending on the Guest OS or applications needs. Also, a Hypervisor can handle dozens of virtual machines in one single server.
Types of Virtual Machines
Virtual Machines are not like Containers, so there are not types of virtual machine.
Type 1 Hypervisor’s (run directly on the host computer’s hardware) Virtual Machines are mainly from VMware, Hyper-V, Citrix XenServer, and Red Hat KVM.
What is a Container?
Next is an image of how is a container built.
Applications and Operations Systems dependencies are packed in the same layer. All dependencies and requirements that an application needs from the OS point of view (like patches, system version, etc.) are already inserted in the OS dependencies stack and used by applications (regardless the Guest OS ).
In Containers, we have an operating system abstraction; they do not depend on the system operation.
Contrarily to a Virtual Machine, a Container is on top of the physical server hardware and its operating system.
As shown in the image above, Container shares operation system resources like binaries and libraries, together with the OS Kernel.
By running multiple workloads in a single operation, installation containers are very lightweight and fast compared to a virtual machine.
Since containers are small in size and lightweight, it takes only a few seconds to boot compared with a virtual machine that has a bigger size and takes longer to boot.
Typically Containers Operation systems are Windows or Linux.
Type of Containers:
- Docker Containers from Docker (Linux based)
- Windows Containers from Microsoft (Windows-based)
- Hyper-V Containers from Microsoft (Windows-based)
- LXD Container from Ubuntu (Linux based)
- Rocket or rkt Container from CoreOS (Linux based)
- OpenVZ (Linux based)
- Unikernels Containers
Virtual Machines and Containers main differences and pros
Pros of Virtual Machines:
- The possibility to resize
- The container can run in a VM
- A more mature virtual environment or technology
- A more secure environment
- Can use Encryption
- Can run multiple services per instance
Virtual Machines are a better choice for a specific application that requires a lot of operating system resources when you need to run multiple services/application on a server.
Pros of Containers:
- Consume less CPU, RAM and Disk resources
- Quick deployment of any application
- Faster deployment and Start / Stop or Restart. Very lightweight and fast
- More straightforward to migrate and fewer workloads
- OS agnostic
- Fewer security updates and process simplified
- Simplistic environment
When you need to prioritize the number of applications running in a minimum number of servers or operating system, then Containers are a better choice.
Main differences between both technologies are the architectural and how they function between Hardware, Operation System layer and the Virtualization Layer.
Virtual Machines are a more mature technology, and Containers are dependent on recent technology to have a good performance since it is not mature as a virtual machine.
Regarding security Containers, security is a work in progress, on the other hand, Virtual Machines are very secure.
Virtual Machine security and encryption is a mature technology that has been developing for years, while in Containers is still a process in development and improvement.
As an example, a single Host Operation System (where a Container relies on) is a single point of failure for all Containers that use the same Host OS.
In a hardware crash or a malware attack, a failure in the host Operation System (market as a single point of failure) have an impact in all Containers. Even Containers are easy to migrate to a different server, it is only possible to migrate to compatible operating systems kernels.
In this article, I tried to answer some simple questions and show the main differences.
Containers and VMs have pros and cons and depending on the needs for a specific environment or implementation.
We can use virtual machines to run any applications in a specific OS, or several applications in the same Virtual Machines regardless of the OS. However, containers are used for a specific application or a set of applications in one image regardless of the OS by using a minimum of resources or hardware.
Choosing one or the other, it depends on what and where it is to be used. If for production, or your testing or R&D department. If it is to use on-premise or in a cloud, or even hybrid.
Before deciding which one you will use, make sure you entirely understand where a Virtual Machine fits and where a Container fits.
Security, resources, disaster recovery (failover), and management, are the areas that you should take into account when selecting which one to use.
Again, both technologies have pros and cons, so the decision depends on the above areas and your specific needs.
If the organization need is an infrastructure that can have and store multiple services, then the best choice should be a Virtual Machine. If the organization need is a single service but can be deployed at a large scale and used in a clustered environment, then the best choice should be a Container.