A virtual machine image contains the operating system and application software needed to run a virtual machine
A virtual machine (VM) image is a file that contains a virtual disk with a bootable operating system installed on it. The VM image allows you to quickly create and run virtual machines that have specific configurations and installed software.
When you create a new virtual machine, you can select an existing VM image to use, rather than having to manually install and configure an operating system and software each time. Using pre-built VM images allows you to quickly scale your environment by deploying many virtual machines from the same image.
VM images allow virtual machines to be portable and to provide a consistent environment for development, testing, training, and production uses. You can easily create, store, access, share, and manage libraries of VM images to use as needed.
Key characteristics of a VM image
- Contains a bootable operating system, like Windows, Linux, etc.
- Has any necessary applications and middleware installed and configured
- May contain sample data for testing environments
- Packaged as a virtual disk file, like .vmdk or .vhd
- Can be used by VM hypervisors like VMware, Hyper-V, VirtualBox, etc
- Makes VMs quick to create and identical when deployed
- Allows VMs to be portable between host environments
- Enables version control, patching, and image updates
- Can be stored in libraries and repositories to share
How VM images work
A VM image contains everything needed to start and run the guest operating system of a virtual machine. This includes:
- Bootloader – Code that boots up the OS when the VM starts
- Operating system – The OS software, like Windows, Linux, etc
- System configuration – How the OS is configured, drivers, settings, etc
- Applications – Any software applications installed on the OS
- Services – Any background services and processes that should run
The VM image is mounted as a virtual hard disk by the hypervisor when the VM boots up. The VM can then access the image to load the OS and files, just like booting up a physical server from a disk drive.
The VM image remains constant, even as you create multiple VMs from it. This ensures each VM instance is identical. If any changes are made, they are stored on separate virtual disks attached to the VM.
Why VM images are important
VM images provide valuable benefits for developing and managing virtualized environments:
- Standardization – VMs can be identical and predictable when deployed from the same image.
- Speed – Quickly stand up new VMs from pre-built images.
- Consistency – Ensure VMs have the right configurations across environments.
- Encapsulation – Images can be easily stored, managed, and updated.
- Isolation – Changes are kept separate from the base image.
- Portability – Images allow VMs to be moved between hosts.
- Version Control – Apply updates and patches by updating the source image.
- Security – Certify secure images then proliferate them across VMs.
- Templating – Define master images then spin-off specific variants.
- Automation – Script image builds, deployment, patching, etc.
- Backup / Recovery – Rebuild VMs by restoring a VM image backup.
Overall, VM images are fundamental to efficiently operating and scaling virtualized infrastructure while maintaining control.
VM image types
There are a few common formats and types of VM images:
- Open Virtualization Format (OVF) – An open standard for packaging VM images in a transportable, platform-independent format. OVF can be used to distribute and deploy VM images across heterogeneous environments.
- Virtual Hard Disk (VHD) – The VHD format is commonly used by Microsoft and Oracle virtualization products. VHD files contain a full virtual hard disk with a bootable OS installed. The .vhd format stores images as dynamic disks that grow as data is added.
- Virtual Machine Disk (VMDK) – The VMDK format is used by VMware for virtual machine images. Like VHD, .vmdk files contain a bootable OS virtual disk image. However, VMDK supports both dynamic and static disk images.
- Raw image – Raw disk images contain all data from a virtual disk in a uncompressed file. Raw images provide maximum portability between VM environments.
- ISO image – An ISO image contains an archive of an optical disc, commonly used to install operating systems on VMs from a CD/DVD-ROM.
- Snapshot – Snapshots capture the state of a VM disk at a point in time, allowing you to revert to that state if needed. Snapshots are typically stored as delta files that record changes since the snapshot.
What is included in a VM image?
The contents of a VM image can vary, but typically include:
- Guest operating system (Windows, Linux, etc.)
- Any OS updates, patches, and configuration
- Virtual hardware drivers (network, disk, etc.)
- Monitoring agents for visibility
- Applications, middleware, and services
- Application data, configuration files
- Accounts and security privileges
- Licenses for software and OS
- Supporting libraries and tools
- Base OS snapshot or image
The more complete an image, the faster VMs can be deployed, as less will need configured after boot up. But larger images also take up more storage space. Organizations may maintain a hierarchy such as:
- Base OS image
- Standard department/role configurations built on top
- Application/service specific templates
Images can then be maintained at each layer and changes easily propagated between layers.
Storing and distributing VM images
VM images must be stored on disks or repositories accessible by your hypervisor. There are several approaches for organizing images:
- Local storage – Host stores images locally on internal disks or storage area network (SAN). Simple but doesn’t scale well.
- Shared storage – Images are placed on shared disks like a SAN or network attached storage (NAS) so all hosts can access them. Allows for centralized management.
- Object storage – Cloud storage like S3 buckets can be used to store images and appeal them from anywhere. Highly scalable and allows global distribution.
- Container registries – Can host and distribute images globally, with optimization, access control and efficiencies. Popular for app containers.
- Dedicated image repos – Specialized tools like VMware vSphere support centralized repositories to store, manage and deploy VM images across infrastructure.
- Version control – Source code management tools can version images like other code artifacts and integrate with build automation.
For scaling production environments, shared storage or dedicated image repositories offer the most efficient ways to manage and deploy images globally. Object stores and registries also offer highly scalable options.
Creating and updating VM images
There are also a variety of techniques for creating and updating VM images over time:
- Installation – Most commonly, images are built by installing an OS and any needed software manually from installation media.
- Sysprepping – Microsoft operating systems can be “sysprepped” to prepare them for imaging and duplication.
- Snapshots – A snapshot of an existing VM can be saved as an image for reuse. However, snapshots preserve unnecessary state info that cause “bloat”.
- Packer – Packer by HashiCorp is a popular open-source tool for templating and validating images using automation scripts.
- Dockerfiles – Text files containing Docker commands can script and build Linux container images.
- Image builders – Tools like VMware vSphere support building images from templates through web UI or API.
- Golden images – A “golden” or master image can be maintained by patching, updating, and blowing away differences after changes.
Keeping images patched and up-to-date over their lifetime is critical. Automated build processes help maintain images consistently and allow updates to propagate rapidly to deployed VMs.
VM image management best practices
To gain the most benefits from VM images, certain best practices should be followed:
- Store images on shared, highly-available storage
- Use standardized naming conventions
- Document image contents and purpose
- Only store minimal required OS and apps in images
- Patch and update images regularly
- Deprecate outdated images
- Have a image lifecycle policy
- Backup images frequently
- Use image repositories and avoid local copies
- Automate image builds when possible
- Track image lineage and relationships
- Monitor image size and optimize regularly
- Control access with permissions by role
- Integrate image management with deployment tools
Use cases and examples of VM images
Some examples of how VM images are utilized include:
Development environments – Teams can standardize on common images containing the OS, middleware, tools, and configurations required for developing applications, web sites, etc. These can include everything needed to code, compile, test locally, etc and new dev environments can spin up rapidly.
Software testing – Testing teams can create images with various software versions, OS platforms, and configurations to test applications against. Testing can validate images meet requirements before they go to production.
Application templates – Images can be created containing fully provisioned applications or services, like a LAMP stack, so that instances can be deployed rapidly.
Cloud scale out – Cloud data centers use images to launch thousands of identical VMs for horizontal scaling. Images allow the flexibility to scale up or down quickly.
Patch management – Applying patches to a master image then rebuilding production VMs from this patched image allowsupdates across environments in a controlled manner.
Disaster recovery – Storing images in backup systems allows recovery of critical systems by spinning up VMs from the image backup in the event of failure or loss.
Cloud migration – Images can be transported cross-cloud to replicate environments from on-prem to cloud or across cloud providers.
Shared desktops – Desktop images can provide a standardized employee desktop environment that follows them across devices (VDI).
- VM images encapsulate a virtual machine environment – OS, apps, configuration – into a reusable file.
- Images allow VMs to be quickly spun up and provide predictable standardization.
- They enable portability, version control, and automation of VM deployment and management.
- Tools exist for creating, managing, storing, and deploying VM images across infrastructure.
- Following best practices for updating and distributing images helps maintain a scalable, robust virtual environment.
Frequently Asked Questions (FAQ)
Here are 20 common questions and answers about VM images:
Q: What is a VM image?
A: A VM image is a file containing the virtual disk with a bootable operating system, applications, and configuration installed to run a virtual machine.
Q: What file types are used for VM images?
A: Common VM image file types are OVF, VHD, VMDK, raw images, and ISO images. Each has advantages depending on the platform and use case.
Q: Are VM images platform independent?
A: Some formats like OVF aim to provide vendor-neutral VM images. But many common image types are tied to hypervisors like VMware, Hyper-V or VirtualBox.
Q: Can I copy or clone a VM image?
A: Yes, most hypervisors allow you to easily copy, download, upload, and clone VM images. This allows quick duplication.
Q: How do I create a VM image?
A: You can create one by installing an OS and apps manually, sysprepping a VM, or using tools like Packer, Dockerfiles, and snapshotting.
Q: Should I maintain one master image or multiple images?
A: You can use a “golden image” approach with one master image updated frequently. Or maintain a hierarchy of images with different layers of customization.
Q: How do images compare to containers?
A: Containers offer operating system virtualization, while VM images provide complete virtualized hardware environments. Images are typically larger.
Q: When should VM images be updated?
A: As a best practice, update master images frequently by patching, upgrading software, blowing away changes, and maintaining proper configuration.
Q: Where and how should I store VM images?
A: For access and sharing across a virtual environment, store images on shared storage like SANs, NAS, or repositories.
Q: How do images help disaster recovery?
A: Storing VM images in backup systems allows recovery of entire VMs by restoring or rebooting from the image backup.
Q: Can I move VM images between on-prem and cloud?
A: Yes, VM images enable portability by allowing you to transport complete environments between on-prem hardware and cloud providers.
Q: How can I optimize VM image sizes?
A: Remove unnecessary data before capturing images, don’t store multiple temporal snapshots, and regularly assess image contents to clean cruft.
Q: Should I track VM image lineage?
A: Tracking parent-child relationships between images can provide insight into lineage and help determine whether shared images contain outdated components.
Q: How can I automate VM management with images?
A: Tools like Packer allow you to script and automate image creation. VM deployment tools can then replicate VMs from latest images.
Q: Do images consume storage space when not used?
A: Yes, VM images consume storage space based on their size even when not currently running as a provisioned VM.
Q: What advantages do VM images provide?
A: They allow standardization, speed of deployment, encapsulation, version control, portability, and consistency across virtual environments.
Q: When should VM images be deprecated?
A: When images are outdated, or newer base images contain all components. Have a policy for aging out stale images.
Q: Can I boot different OSs from a multi-boot image?
A: Yes, some tools like Packer allow you to create images with multiple OS installations for multi-boot capability.
Q: Is a VM snapshot the same as an image?
A: No, snapshots capture VM state changes, not entire environments. Snapshots should not be used as full images.