Containers vs. Virtual Machines in Azure

Containers have been called the next generation of virtualization because they provide application abstraction in much the same way that VMs provide hardware abstraction. Instead of virtualizing the hardware like a VM, a container virtualizes at the OS level. Containers run at a layer on top of the host OS and they share the OS kernel. Containers have much lower overhead than VMs and a much smaller footprint.

Containers are not replacements for VMs or operating systems. You install containers on VMs

Containers and virtual machines have similar resource isolation and allocation benefits - but a different architectural approach allows containers to be more portable and efficient.
click to enlarge image
A high-level feature comparison of VMs and containers -

Feature VMs Containers
"Default" security support to a greater degree to a slightly lesser degree
Memory on disk required Complete OS plus apps App requirements only
Time taken to start up Substantially Longer: Boot of OS plus app loading Substantially shorter: Only apps need to start because kernel is already running
Portability Portable With Proper Preparation Portable within image format; typically smaller
Image Automation Varies widely depending on OS and apps Docker registry; others
MaintenanceOS and app maintenance inextricably linkedOS instance and apps maintenance decoupled
EnvironmentDedicated OS instance per app. Full isolation of guestsVirtualizes operating system by sharing the host OS. Full isolation of app environments

Also see: Container-based application architectures in Microsoft Azure

Comments