Generally, a virtual machine looks like just a normal computer and operating system to anyone logging into it over a network. A virtual machine will usually have virtual disks, virtual network interfaces, and often a virtual display.
A typical server will run up to several dozen virtual machines. Some servers may run hundreds or even thousands of virtual machines.
Guest Operating System and Remote Access
A virtual machine can run almost any guest operating system, including Linux and Windows. Linux virtual machines are typically accessed over the network using SSH. Windows virtual machines are often accessed remotely using Windows remote desktop. Many virtualization systems also give access to the host's virtual console display.
Virtual Machine Device Access
A virtual machine uses virtual devices to interact with the host operating system. The host operating system may emulate actual hardware to allow the guest operating system (i.e., the operating system running on the virtual machine) to access storage, network, and other resources.
Many hypervisors and guest operating systems support paravirtualized device drivers. This means that the guest operating system driver does not actually access emulated hardware; instead, it recognizes it is running on a particular hypervisor, and uses a hypervisor-specific communication mechanism to access the hypervisor's device drivers. The hypervisor may control and map access to its device drivers to enforce security and direct the virtual machine to its own virtual storage.
A container is a special kind of virtual machine that has no guest operating system. Instead, it is a group of processes isolated from other processes on the same host using special namespaces. In linux, these are called
cgroups or control groups.