A virtual machine is a software-emulated computer that gives an application its own operating environment. Each application can run with isolated dependencies and allocated resources instead of sharing them directly on one host. section 1.1
This isolation solves problems found when multiple applications share directories, dependencies, CPU, memory, and network ports. The trade-off is operational overhead: every VM has the complexity of an individual host, including an operating system and its packages to maintain. section 1.1
Compared with neighboring deployment models:
- Shared hosting installs multiple applications on one host, increasing coordination around dependencies and resources. section 1.1
- Virtual machines separate applications into individual operating environments, improving isolation while requiring an operating system per application. section 1.1
- Containers package the application and its dependencies without installing and managing another operating-system kernel, preserving many VM benefits with less overhead. section 1.1
- Kubernetes operates above compute instances such as VMs, allowing workloads to request CPU, memory, disk, or GPU without managing individual machines. section 1.2.2
One application per VM
A deployment can package each application into its own VM so dependencies remain isolated and resources can be divided and allocated independently. Scaling still requires managing the resulting individual hosts. section 1.1
The hosting-evolution diagram contrasts shared hosts, separate VMs, and containers, making the isolation-versus-overhead trade-off visible. section 1.1















