Docker vs Virtual Machine

2 min read Tweet this post

Docker and virtual machines (VMs) are both technologies for creating isolated environments for running applications, but they have some important differences and both on them represent containerization for docker and virtualization for virtual machine.

Virtualization is a technology that allows you to create multiple simulated environments or dedicated resources from a single, physical hardware system1

  • A VM is a software-based representation of a physical computer that runs on a host machine. Each VM operates as its own independent machine, with its own operating system (OS), system resources, and network configuration.
  • VMs provide a high degree of isolation and compatibility, as they can run any OS that is compatible with the host machine.
  • VMs are typically larger in size and require more resources than Docker containers, as each VM includes its own OS and system libraries.
  • VMs are well suited for applications that require a high degree of isolation and compatibility, such as legacy applications that need to run on an older version of an OS.

Containerization is the packaging together of software code with all its necessary components like libraries, frameworks, and other dependencies so that they are isolated in their own “container”2

  • Docker is a platform for building, shipping, and running applications in containers. A container is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it.
  • Docker containers are much smaller in size than VMs, as they share the host machine’s OS and libraries.
  • Docker containers provide a high degree of portability and consistency, as they can run the same way on any machine that has Docker installed.
  • Docker is well suited for modern applications that are designed to run in microservices architecture and require fast deployment, scaling, and resource utilization.

The primary differences between virtualization and containerization are:

  • Virtualization involves creating an abstraction layer over hardware by the hypervisor, allowing multiple operating systems to run simultaneously. This approach is considered the first generation of cloud computing.
  • Containerization, on the other hand, is a lighter weight version of virtualization that virtualizes the operating system rather than the hardware. Without the hypervisor, containers can benefit from faster resource provisioning. The necessary resources, including code and dependencies, are packaged together to run the application or microservice anywhere.

The main difference between Docker and VMs lies in their architecture, ilustrated below.


 ┌────┐    ┌────┐
 │APP1│    │APP2│
 ├────┤    ├────┤       container   container
 │libs│    │libs│         ┌──────┐ ┌─────┐
 ├────┘    └────┤         │┼────┼│ │┼───┼│
 │GUEST    GUEST│         ││app ││ ││app││
 │ OS │    │OS  │         │┼────┼│ │┼───┼│
 ├────┴────┴────┤         ├──────┴─┴─────┤
 │  HYPERVISOR  │         │ DOCKER ENGINE│
 ├──────────────┤         ├──────────────┤
 │  HOST OS     │         │  HOST OS     │
 └──────────────┘         └──────────────┘
   virtual machine            docker

In conclusion, the choice between Docker and VMs depends on the specific requirements of the application and the trade-offs between isolation, compatibility, portability, and resource utilization. Both technologies have their own strengths and weaknesses, and the right choice will depend on the specific use case.

  1. https://www.redhat.com/en/topics/virtualization

  2. https://www.redhat.com/en/topics/cloud-native-apps/what-is-containerization

general