What is a Virtual Machine?
Virtual machines are heavy software packages that provide complete emulation of low-level hardware devices like CPU, Disk and Networking devices. Virtual machines run many operating systems simultaneously on a single piece of hardware. In this hardware, a specialized host operating system performs the role of a hypervisor. The hypervisor is in charge of controlling who has access to hardware and when. In addition, we create partitions and install an entire operating system together with any binaries, libraries, and applications we require to run in each partition.
What is a Container?
Containers may share some similarities, such as the fact that they contain hardware, some kind of host operating system like the Container engine, and what this Container Engine is doing is exposing parts of the host operating system into the partitions, the partitions only contain binaries and libraries and not an entire operating system since they don’t have to as they can share the operating system’s kernel. By sharing resources, they lose their autonomy and individuality but gain significant productivity, which is where containers get their actual strength.
Virtual Machines | Containers |
Hardware-level Process Isolation | OS level process isolation |
VM offers complete isolation of application from host OS | Docker containers can share some resources with the host OS |
Each VM has a separate OS | Each docker container can share OS resources |
Boosts in minutes | Boosts in seconds |
More resource usage | Less resource usage |
Pre-configured VMs are hard to find and manage | Pre-built docker container for home server apps already available |
Customizing pre-configured VMs required work | Building a custom setup with the container is easy |
VMs are typically bigger in size as they contain the whole OS underneath | Docker containers are small in size with only the docker engine over the host OS |
VMs can easily be moved to a new host | Containers are destroyed and recreated rather than moving |
Creating a VMs can take a relatively long time | Docker containers can be created in seconds |
Virtualize Apps are harder to find and it takes more time to install and run them | Containerized apps such as Sona, CouchPotatoa, etc. can be found easily within minutes |
Conclusion
Virtual Machines give us isolated independent operating systems that we can install applications on. we can run different operating systems on top of the same hardware and can maximize our hardware utilization in exchange for a little bit more sluggish performance. Containers, on the other hand, are much faster. they take less space. they deploy more rapidly and are wonderful for auto-scaled cloud deployments. But they leverage a shared kernel. and that makes them a little susceptible to not being isolated from the other containers running on the system.
References: https://www.atlassian.com/microservices/cloud-computing/containers-vs-vms https://www.ubackup.com/enterprise-backup/difference-between-containers-and-virtual-machines-jkzbj.html