We have been using virtualization for quite some time now and unless you have been living under a rock, Docker containers have also been in the game for well over 4 years. Before we even begin discussing how they are different and unique from each other, let us get a short explanation of each of them.
What is Virtualbox/Virtual Machine?
When we talk about virtual-box or virtualization, it means the creation of a virtual copy of an operating system to run our apps, programs, and services. This virtual copy is no less than any physical system with the only difference being that it requires you to already have a physical system called the ‘HOST’ on top of which the virtual machine or ‘GUEST’ exists.
This virtual machine is usually allocated resources by specialized Type-2 Hypervisor software like Virtual-Box by Oracle, VM-Ware Workstation, QEMU etc. All your dependencies like libraries, binaries and system files that are needed for your application to work are made available inside the Virtual Machine’s Guest OS.
What is Container?
Containers are standalone packages that contain everything needed to run your application. A container contains your binaries, libraries and other dependencies all under one roof. A container doesn’t require you to run a guest operating system. Containers work on the main physical system and when multiple containers coexist, they all share the same kernel of the host system.
Consider a container, very hypothetically as an all in one food dispenser lying in your kitchen. You wouldn’t need any other intermediary device for running that dispenser. All you need is just the dispenser that is kept in your kitchen. The kitchen is your host system and the food dispenser is your container.
What’s the Difference between Virtual Machine and Container?
Now you might be wondering, they both ultimately run virtually in one way or the other. So what’s the difference? Why such a hype ?. The answer is simple.
A Virtual Box is a complete system with its own kernel and environment running on top of a Host system. The Virtual Box system gets all its resources through the Type-2 Hypervisor running on the HOST. The Virtual Box may not have any knowledge of the HOST system at all.
A Container is just a package of all the libraries, binaries and software dependencies needed to run that particular app. The container is not a virtual system by itself. It runs on the HOST system as a package. A container is mostly used in scenarios when we need to run an application by isolating it from the HOST system. This may be done for multiple reasons including to prevent the app from going offline if a shared package breaks down.
When to use a Virtual Machine?
If you ever happen to be running a Linux web server on a windows system. You could do that on a virtual machine, you could just install your apache, your interpreters, your DBMS and have it running. If ever the need arises for some other application that you might need, you just need to install it over there.
When to use Container?
Let’s say if you have windows and wanted to run multiple instances of an Apache server, you could do that using containers. Each container will have its own copy of the Apache, PHP, DBMS and other libraries and binaries needed and nothing will be shared. This isolates the container from the underlying system.
This isn’t exactly the question that has a straight up answer. Containers were not made as an alternative to Virtual Machines. A virtual machine does indeed use exponentially more resources than a container but that’s not how the comparison should be made. It works best when Container and virtualization technologies are used together. For instance, if you have a windows system and you want to host a Linux app, you could install a Linux VM and in that VM have containers of those apps.
A virtual machine creates a full copy of an operating system, unlike a container which copies only the dependencies needed to run that particular app. A virtual machine does utilize more resources than a container. However a container needs to be a part of the OS whereas a virtual machine is an OS in itself. For some specific tasks, containers might have an edge over Virtual machines, but no full proof comparison can be made. Container and Virtualization technologies work best when they are used together.