Send feedback
Create instance templates
Stay organized with collections
Save and categorize content based on your preferences.
This page describes how to create and manage
instance templates .
Instance templates let you specify the machine type, boot disk image, network,
and other VM properties that you want to use when creating virtual machine
(VM) instances.
You can use instance templates to do the following:
Before you begin
Read when and why to create deterministic instance templates.
Read about regional and global instance templates .
If you include Dynamic Network Interfaces (NICs) in the instance template, review the
properties and limitations of Dynamic NICs as described in
Dynamic NICs .
For more information about creating instances with multiple network
interfaces, see
Create VMs with multiple network interfaces .
If you haven't already, set up authentication .
Authentication verifies your identity for access to Google Cloud services and APIs. To run
code or samples from a local development environment, you can authenticate to
Compute Engine by selecting one of the following options:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and
APIs, you don't need to set up authentication.
To use the Terraform samples on this page in a local development environment, install and
initialize the gcloud CLI, and then set up Application Default Credentials with
your user credentials.
Install the Google Cloud CLI.
If you're using an external identity provider (IdP), you must first
sign in to the gcloud CLI with your federated identity .
If you're using a local shell, then create local authentication credentials for your user
account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider
(IdP), confirm that you have
signed in to the gcloud CLI with your federated identity .
For more information, see
Set up authentication for a local development environment .
Limitations
Shared VPC on interfaces other than nic0 for instance templates is
supported in gcloud CLI and REST, but not in
Google Cloud console.
You can't update an existing instance template or change an instance
template after it has been created. If an instance template goes out of date, or
you need to make changes to the configuration, create a new instance template.
If you want to specify an image family in an instance template, you can't use
the Google Cloud console. You can use the Google Cloud CLI or
REST instead.
If you want to specify regional disks instead of zonal disks in an instance
template, you can't use the Google Cloud console. You can use the
Google Cloud CLI or REST instead.
You can use an instance template to create VMs with a Hyperdisk Balanced boot disk that
is in a storage pool ,
if the storage pool exists in the same zone that the VM is
created in. You can't use global instance templates to create VMs with non-boot
disks that are in a storage pool.
Create an instance template
Most of the VM properties that you can specify in a request to create an
individual VM instance can also be specified for an instance template,
including any VM metadata, startup scripts, persistent disks, and service
accounts. You must specify the machine type, boot disk, and network.
Create a regional or global instance template through the
Google Cloud console , Google Cloud CLI , or the
API . To create a global
instance template, you can also use the Terraform or
the Cloud Client Libraries .
Permissions required for this task
To perform this task, you must have the following
permissions :
Console In the Google Cloud console, go to the Instance templates page.
Go to Instance templates
The remaining steps appear in the Google Cloud console.
Click Create instance template .
Select the Location as follows:
If you want to use the instance template across regions, choose Global .
If you want to reduce cross-region dependency, choose Regional .
If you chose regional, then select the Region where you want to create your
instance template.
For the following fields, either accept the default values or modify them as required.
The default values change based on the machine family that you select.
Select a Machine type .
To update the boot disk type or image, in the Boot disk section, click Change .
To update the network interface or IP address settings, click Advanced options , then click Networking , and then click the network interface you want to edit.
Optional: If you chose an image that supports Shielded VM, change the VM's
Shielded VM settings:
Click Advanced options ,
and then click the Security tab.
If you want to disable Secure Boot, clear the
Turn on Secure Boot checkbox. Secure Boot helps protect your
VM instances against boot-level and kernel-level malware and
rootkits. For more information, see
Secure boot .
If you want to disable the virtual trusted platform module (vTPM),
clear the Turn on vTPM checkbox. The vTPM enables Measured
boot, which validates the VM pre-boot and boot integrity. For more
information, see
Virtual Trusted Platform Module (vTPM) .
Important : Disabling the vTPM also disables integrity monitoring
because integrity monitoring relies on data gathered by Measured
boot.
If you want to disable integrity monitoring, uncheck the
Turn on Integrity Monitoring checkbox. Integrity monitoring
lets youn monitor the boot integrity of your Shielded VM instances by using
Cloud Monitoring. For more information, see
Integrity monitoring .
Optional: Under Advanced options , click the tabs to further customize
your template. For example, you can add up to 15 secondary non-boot disks.
Optional: Click Equivalent REST to view the REST request body, which
includes the
JSON representation
of your instance template.
Click Create to create the template.
gcloud To create a regional or global instance template, use the
instance-templates create command .
For a regional instance template, you must use the
--instance-template-region flag to set the region of the template.
Create a regional instance template using the following command.
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--instance-template-region=REGION
Replace REGION with the region where you
want to create the regional instance template.
Create a global instance template using the following command:
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME
If you don't provide explicit template settings, gcloud compute uses
the following default values:
Machine type: the machine type—for example, n1-standard-1
Image: the latest Debian image
Boot disk: a new standard boot disk named after the VM
Network: the default VPC network
IP address: an ephemeral external IPv4 address
Stack type: IPV4_ONLY
You can also explicitly provide these configuration settings. For example:
gcloud compute instance-templates create my-instance-template \
--machine-type=e2-standard-4 \
--image-family=debian-11 \
--image-project=debian-cloud \
--boot-disk-size=250GB
You can add up to 15 secondary non-boot disks. Specify the --create-disk
flag for each secondary disk you create. To create secondary disks from a
public or custom image, specify the image and image-project properties
for each disk in the --create-disk flag. To create a blank disk, don't
include these properties. Optionally, include properties for the disk size
and type. To
specify regional disks, use the replica-zones property.
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--machine-type=MACHINE_TYPE \
--create-disk=image-family=DISK_IMAGE_FAMILY ,image-project=DISK_IMAGE_PROJECT ,size=SIZE_GB_DISK1 \
--create-disk=device-name=DISK_NAME ,type=DISK_TYPE ,size=SIZE_GB_DISK2 ,replica-zones=^:^ZONE :REMOTE_ZONE ,boot=false
Tip: When specifying
the disk replica-zones parameter, the characters ^:^ specify that
the separation character between values is a colon (:) instead of the
expected comma (,).
Replace the following:
INSTANCE_TEMPLATE_NAME : the name for the template
MACHINE_TYPE : the machine type of the VMs
DISK_IMAGE_FAMILY : an image family to use as a
non-boot disk
For more information about image families, see
best practices when using image families
on Compute Engine.
You can use instead the flag
--image=IMAGE to specify a specific
version of an image.
For blank disks, don't specify the image-family or image property.
DISK_IMAGE_PROJECT : the
image project that contains the image
For blank disks, don't specify the image-project property. For more
information on public images, see Public images .
SIZE_GB_DISK1 and
SIZE_GB_DISK2 : the size of each secondary disk
DISK_NAME : Optional: the disk name displayed to
the guest OS after the VM is created.
DISK_TYPE : Optional: the type of disk to create.
If not specified, the default disk type that is used depends on the
value of the --machine-type flag.
ZONE and REMOTE_ZONE :
the zone to create the regional disk
in and the zone to replicate it to.
For zonal disks, don't include the replica-zones property.
If you chose an image that supports
Shielded VM , you can
optionally change the instance's Shielded VM settings using one
of the following flags:
--no-shielded-secure-boot: turns off Secure Boot
Secure Boot helps protect your VM instances against boot-level and
kernel-level malware and rootkits. For more information, see
Secure Boot .
--no-shielded-vtpm: turns off the virtual trusted platform module
(vTPM)
The vTPM enables Measured Boot, which validates the VM pre-boot
and boot integrity. For more information, see
Virtual Trusted Platform Module (vTPM) .
Important: Disabling the vTPM also
disables integrity monitoring because integrity monitoring relies on
data gathered by Measured Boot.
--no-shielded-integrity-monitoring: turns off integrity monitoring
Integrity monitoring lets you monitor the boot integrity of your
Shielded VM instances using Cloud Monitoring.
For more information, see
Integrity monitoring .
For a list of all available subcommands and flags, see the
instance-templates reference .
To create an instance template, use one of the following resources:
The following example creates a global instance template:
To learn how to apply or remove a Terraform configuration, see
Basic Terraform commands .
REST To create a regional instance template, make a POST request to the
regionInstanceTemplates.insert method
as follows:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /regions/REGION /instanceTemplates
To create a global instance template, make a POST request to the
instanceTemplates.insert method :
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /global/instanceTemplates
You can add up to 15 secondary non-boot disks by using the
disks property, with a field for each additional disk. For each
additional disk, you can do the following:
Create additional disks with a public or custom image.
To add a blank disk, define the initializeParams entry with no
sourceImage value.
To create regional disks, define the initializeParams entry
with the property replicaZones.
In the body of the request, provide the template properties:
{
"name": "INSTANCE_TEMPLATE_NAME ",
"properties": {
"machineType": "MACHINE_TYPE ",
"networkInterfaces": [
{
"network": "global/networks/default",
"accessConfigs":
[
{
"name": "external-IP",
"type": "ONE_TO_ONE_NAT"
}
]
}
],
"disks":
[
{
"type": "PERSISTENT",
"boot": true,
"mode": "READ_WRITE",
"initializeParams":
{
"sourceImage": "projects/IMAGE_PROJECT /global/images/IMAGE "
}
},
{
"type": "PERSISTENT",
"boot": false,
"deviceName": "DISK_NAME ",
"initializeParams":
{
"replicaZones": [
"projects/PROJECT_NAME /zones/ZONE ",
"projects/PROJECT_NAME /zones/REMOTE_ZONE "
]
}
}
]
}
}
Replace the following:
PROJECT_ID : your project id
REGION : the region where you want to create your
regional instance template
INSTANCE_TEMPLATE_NAME : the name of the instance
template
ZONE : the zone where VMs are located
MACHINE_TYPE : the machine type of the VMs
IMAGE_PROJECT : the image project that contains the image
For more information on public images, see Public images .
IMAGE or IMAGE_FAMILY :
specify one of the following:
IMAGE : a specific version of the image
For example,
"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
IMAGE_FAMILY : an image family
This creates the VM from the most recent, non-deprecated OS image.
For example, if you specify
"sourceImage": "projects/debian-cloud/global/images/family/debian-10",
Compute Engine creates a VM
from the latest version of the OS image in the Debian 10 image
family.
For more information on image families, see
best practices when using image families on Compute Engine.
DISK_NAME : Optional: the disk name displayed to
the guest OS after the VM is created.
PROJECT_NAME : the project associated with the VM
REMOTE_ZONE : the zone where the regional disk
should be replicated to
You can specify one of the following options for the disks property:
Specify initializeParams to create boot disks for each
instance. You can create disks by using public or custom images
(or image families ) using the
sourceImage property, as shown in the preceding example. To add blank
disks, don't specify a sourceImage. You can also add up to 15 secondary
non-boot disks by using the initializeParams property for each
additional disk.
Specify source to attach an existing boot disk. If you attach
an existing boot disk, you can only create one instance from your
template.
Optionally, you can specify the diskSizeGb, diskType, and
labels properties for
initializeParams and the diskSizeGb property for source.
If you chose an image that supports
Shielded VM , you can
optionally change the VM's Shielded VM settings by using
the following Boolean request body items:
enableSecureBoot: turns on or off Secure Boot
Secure Boot helps protect your VM instances against boot-level and
kernel-level malware and rootkits. For more information, see
Secure Boot .
enableVtpm: turns on or off the virtual trusted platform module
(vTPM)
The vTPM enables Measured Boot, which validates the VM
pre-boot and boot integrity. For more information, see
Virtual Trusted Platform Module (vTPM) .
Important: Disabling the vTPM also
disables integrity monitoring because integrity monitoring relies on
data gathered by Measured Boot.
enableIntegrityMonitoring: turns on or off integrity
monitoring
Integrity monitoring lets you monitor and verify the
runtime boot integrity of your Shielded VM instances by using
Cloud Monitoring reports. For more information, see
Integrity monitoring .
To learn more about request parameters, see the
instanceTemplates.insert method .
Create an instance template based on an existing instance
You can use REST or gcloud CLI to save the
configuration of an existing VM instance as an instance template. You can
optionally override how the source disks are defined in the template.
If you need to override other properties, first create an instance
template based on an existing instance, then
create a similar template with additional
overrides.
Warning: If the existing instance contains a static external IP address, that
address is copied into the instance template and might limit the use of the
template.
Permissions required for this task
To perform this task, you must have the following
permissions :
gcloud Use the
gcloud compute instance-templates create command
with the --source-instance and --source-instance-zone flags. If you want
to create a regional instance template, then you must also use the
--instance-template-region flag to specify the region of the instance
template.
To create a regional instance template, use the following command:
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--source-instance=SOURCE_INSTANCE \
--source-instance-zone=SOURCE_INSTANCE_ZONE \
--instance-template-region=REGION
To create a global instance template, use the following command:
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--source-instance=SOURCE_INSTANCE \
--source-instance-zone=SOURCE_INSTANCE_ZONE
To override how the source instance's disks are defined, add one or more
--configure-disk flags.
The following example creates a global instance
template from an existing instance and overrides the source instance's
disk with the specifications that you provide.
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--source-instance=SOURCE_INSTANCE \
--source-instance-zone=SOURCE_INSTANCE_ZONE \
--configure-disk= \
device-name=SOURCE_DISK , \
instantiate-from=INSTANTIATE_OPTIONS , \
auto-delete=AUTO_DELETE
Replace the following:
INSTANCE_TEMPLATE_NAME is the name of the template
to create.
SOURCE_INSTANCE is the name of the instance to use
as a model for the new template.
SOURCE_INSTANCE_ZONE is the zone that contains the
source instance.
SOURCE_DISK is the name of a source-instance disk
that you want to override within the template.
INSTANTIATE_OPTIONS specifies whether to include
the disk and which image to use. Valid values depend on the type of disk:
source-image or source-image-family (valid only for boot and other
persistent read-write disks). Specify this option if you want to use the
same source image or source image family that was used to create the
disk in the source VM instance.
custom-image (valid only for boot and other persistent read-write
disks). If you want to retain applications and settings from the source
VMs in your instance template, you can
create a custom image
and then specify it when you create the template.
If specified, then provide the path or URL for the custom image,
as shown in the following example. Alternatively, you
can specify an image family using the following format:
--configure-disk=device-name=DATA_DISK_NAME ,instantiate-from=custom-image, \
custom-image=projects/PROJECT_ID /global/images/family/IMAGE_FAMILY_NAME
attach-read-only (valid only for read-only disks).
blank (valid only for non-boot persistent disks and local SSDs). If
specified, then, when the template is used to create a new instance, the
disk is created unformatted. You must
format and mount
the disk in a startup script before you can use it in a scalable setup.
do-not-include (valid only for non-boot persistent disks and
read-only disks).
AUTO_DELETE specifies whether the disk is
auto-deleted when the instance is deleted. Valid values are:
false, no, true, and yes.
For example, the following command creates an instance template based on
my-source-instance, with the option to use the original image from
data-disk-a, but set auto-delete to true and replace data-disk-b
with a custom image.
gcloud compute instance-templates create my-instance-template \
--source-instance=my-source-instance \
--configure-disk=device-name=data-disk-a,instantiate-from=source-image,auto-delete=true \
--configure-disk=device-name=data-disk-b,instantiate-from=custom-image,custom-image=projects/cps-cloud/global/images/cos-89-16108-403-15
REST To create a regional instance template, use the regionInstanceTemplates.insert method ,
or, to create a global instance template, use the instanceTemplates.insert method .
In your request, you must specify the sourceInstance field. To override how the source
instance's disks are defined, add one or more diskConfigs fields.
For example, make the following call to create a global instance template
from an existing instance.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /global/instanceTemplates
{
"name": "INSTANCE_TEMPLATE_NAME ",
"sourceInstance": "zones/SOURCE_INSTANCE_ZONE /instances/SOURCE_INSTANCE ",
"sourceInstanceParams": {
"diskConfigs": [
{
"deviceName": "SOURCE_DISK ",
"instantiateFrom": "INSTANTIATE_OPTIONS ",
"autoDelete": false
}
]
}
}
Replace the following:
The following example creates a new instance template based on
my-source-instance. In the instance template, the image for data-disk-a
is replaced with projects/cos-cloud/global/images/cos-89-16108-403-15.
POST https://compute.googleapis.com/compute/v1/projects/my_project/global/instanceTemplates
{
"name": "my-instance-template",
"sourceInstance": "zones/us-central1-a/instances/my-source-instance",
"sourceInstanceParams":
{
"diskConfigs":
[
{
"deviceName": "data-disk-a",
"instantiateFrom": "custom-image",
"customImage": "projects/cos-cloud/global/images/cos-89-16108-403-15"
}
]
}
}
The following table shows how the options for overriding disks are defined
in the template.
Disk type
Options
Boot disk
Other read/write persistent disks
Read-only disk(s)
[Default] Include the disk in read-only mode.
Don't include the disk.
Local SSD(s)
[Default] Include a blank local SSD. When the template is
used to create a new instance, this disk is created
unformatted. You must
format and
mount the disk in a startup script before you can use it in a
scalable setup.
For each disk, you can also override the auto-delete attribute to specify
whether the disk should be deleted when its associated instance is
deleted.
By default, if no override options are specified, the disk configuration in
the template matches the source instance.
Create an instance template based on an existing template
You can't update an existing instance template. But, if an instance template
goes out of date or if you need to make changes, you can create another one with
similar properties by using the console.
Go to the Instance templates page.
Go to Instance templates
Click the instance template that you want to copy and update.
Click Create similar .
Update the configuration in the new template.
Click Create .
Create an instance template for GPU VMs
When creating an instance template, you can configure it for creating VMs
that have attached GPUs by specifying the following:
Note: If you want to run data science or machine learning workloads,
consider using a Deep Learning VM image when you create an
instance template. Deep Learning VM Images is a set of
prepackaged VM images that comes with machine learning frameworks and essential
tools. For more information about these images, see Choose an image
in the Deep Learning VM Images documentation.
Permissions required for this task
To perform this task, you must have the following
permissions :
Console To create an instance template for GPU VMs, do the following:
In the Google Cloud console, go to the Instance templates page.
Go to Instance templates
Click Create instance template .
In the Name field, enter a name for the instance template.
In the Location section, select one of the following options:
To create a global instance template, select Global (default).
To create a regional instance template, select Regional , and
then select the region where you want to create the instance
template.
In the Machine configuration section, do the following:
Click the GPUs tab.
In the GPU type menu, select the GPU type.
In the Number of GPUs menu, select the number of GPUs.
Optional: If your GPU model supports
NVIDIA RTX Virtual Workstations (vWS) for graphics workloads ,
and you plan to run graphics-intensive workloads, select
Enable Virtual Workstation (NVIDIA GRID) .
In the Machine type section, select a machine type.
Optional: To change the default value boot disk type or image, in the
Boot disk section, click Change . Then, follow the prompts to
change the boot disk.
Click Create .
gcloud To create an instance template for GPU VMs, use the
instance-templates create command
with the --maintenance-policy flag set to TERMINATE.
For example, to create a global instance template for GPU VMs, use the
following command:
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--image-project=IMAGE_PROJECT \
--image-family=IMAGE_FAMILY \
--machine-type=MACHINE_TYPE \
--maintenance-policy=TERMINATE
Replace the following:
INSTANCE_TEMPLATE_NAME : the name of the instance
template.
IMAGE_PROJECT : the image project that contains the
image; for example, debian-cloud. For more information about the
supported image projects, see
Public images .
IMAGE_FAMILY or IMAGE : specify one
of the following:
IMAGE_FAMILY : an
image family . This specifies the
most recent, non-deprecated OS image. For example, if you specify
debian-10, the latest version in the Debian 10 image family is
used. For more information about using image families, see
Image families best practices .
IMAGE : a specific version of the OS image; for
example, debian-10-buster-v20200309. If you choose to specify a
specific version of the OS image, then you must replace the
--image-family flag with the --image flag.
MACHINE_TYPE : the machine type of the VMs. If you
specify an N1 machine type, then include the
--accelerator flag
to specify the number and type of GPUs to attach to your VMs.
For example, assume that you want to create a global instance template for
GPU VMs that specifies the following properties:
An N1 predefined machine type with 2 vCPUs.
One NVIDIA T4 GPU to attach to the VMs.
Debian as the image project.
Debian 10 as the image family.
To create the example instance template, use the following command:
gcloud compute instance-templates create instance-template-gpu \
--accelerator=count=1,type=nvidia-tesla-t4 \
--machine-type=n1-standard-2 \
--image-family=debian-10 \
--image-project=debian-cloud \
--maintenance-policy=TERMINATE
To create an instance template, use one of the following resources:
The following example creates a global instance template that specifies an
N1 predefined machine type with 2 vCPUs and one NVIDIA T4 GPU attached:
To learn how to apply or remove a Terraform configuration, see
Basic Terraform commands .
REST To create an instance template for GPU VMs, make a POST request to the
instanceTemplates.insert method .
In the request body, include the onHostMaintenance field and set it to
TERMINATE.
For example, to create a global instance template for GPU VMs, make a POST
request as follows:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /global/instanceTemplates
{
"name": "INSTANCE_TEMPLATE_NAME ",
"properties": {
"disks": [
{
"type": "PERSISTENT",
"boot": true,
"mode": "READ_WRITE",
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT /global/images/IMAGE "
}
}
],
"machineType": "MACHINE_TYPE ",
"networkInterfaces": [
{
"accessConfigs": [
{
"name": "external-IP",
"type": "ONE_TO_ONE_NAT"
}
],
"network": "global/networks/default"
}
],
"scheduling": {
"onHostMaintenance": "TERMINATE"
}
}
}
Replace the following:
PROJECT_ID : the ID of the project in which you want
to create the instance template.
INSTANCE_TEMPLATE_NAME : the name of the instance
template.
IMAGE_PROJECT : the image project that contains the
image; for example, debian-cloud. For more information about the
supported image projects, see
Public images .
IMAGE or IMAGE_FAMILY : specify one
of the following:
IMAGE : a specific version of the OS image; for
example, debian-10-buster-v20200309.
IMAGE_FAMILY : an
image family . This specifies the
most recent, non-deprecated OS image. For example, if you specify
family/debian-10, the latest version in the Debian 10 image family
is used. For more information about using image families, see
Image families best practices .
MACHINE_TYPE : the machine type of the VMs. If you
specify an N1 machine type, then include the
guestAccelerators field
to specify the number and type of GPUs to attach to your VMs.
For example, assume that you want to create a global instance template for
GPU VMs that specifies the following properties:
An N1 predefined machine type with 2 vCPUs.
One NVIDIA T4 GPU to attach to the VMs.
Debian as the image project.
Debian 10 as the image family.
To create the example instance template, make a POST request as follows:
POST https://compute.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates
{
"name": "instance-template-gpu",
"properties": {
"disks": [
{
"type": "PERSISTENT",
"boot": true,
"mode": "READ_WRITE",
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/family/debian-10"
}
}
],
"guestAccelerators": [
{
"acceleratorType": "nvidia-tesla-t4",
"acceleratorCount": 1
}
],
"machineType": "n1-standard-2",
"networkInterfaces": [
{
"accessConfigs": [
{
"name": "external-IP",
"type": "ONE_TO_ONE_NAT"
}
],
"network": "global/networks/default"
}
],
"scheduling": {
"onHostMaintenance": "TERMINATE"
}
}
}
For more configuration options when creating an instance template, see
Create an instance template in this document.
Create an instance template with a container image
Caution: The container startup agent that deploys containers on VMs during VM creation is deprecated.
Use the docker run commands in a startup script or use the cloud-init tool
to configure and to run containers on your VMs and MIGs. For more information,
see Migrate containers that were deployed on VMs during VM creation .
You can specify a container image in an instance template. By default,
Compute Engine also includes in the template a
Container-Optimized OS image with Docker
installed. When you use the template to create a new instance, the container is
launched automatically as the instance starts up.
Console
Note: The Deploy container option in the Google Cloud console is deprecated.
Use the equivalent docker run command to configure and to run the container.
Go to the Instance templates page.
Go to Instance templates
Click Create instance template .
In the Container section, click Deploy Container .
In the Configure container dialog, specify the Container image to use.
You can specify an image from Container Registry
or Artifact Registry .
For example:
gcr.io/cloud-marketplace/google/nginx1:TAG ,
where TAG is the tag defined for a specific
version of NGINX container image available on Google Cloud Marketplace.
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
selects a sample hello-app image stored in Artifact Registry.
If you use a container image from Docker Hub, always specify the
full Docker image name. For example, specify the following image name
to deploy an Apache container image: docker.io/httpd:2.4.
Optionally, click Advanced container options . For more information,
see
Configuring options to run your Container .
Click Create .
gcloud
Note: The create-with-container gcloud CLI command is deprecated.
Use the equivalent docker run command to configure and to run the container.
Use the
gcloud compute instance-templates create-with-container command :
gcloud compute instance-templates create-with-container INSTANCE_TEMPLATE_NAME \
--container-image=CONTAINER_IMAGE
Replace the following:
INSTANCE_TEMPLATE_NAME : The name of the template
to create.
CONTAINER_IMAGE : The full name of the container
image to use.
For example, the following command creates a new instance template named
nginx-vm. A VM instance created from this template launches and
runs the container image, gcr.io/cloud-marketplace/google/nginx1:TAG ,
when the VM starts.
gcloud compute instance-templates create-with-container nginx-vm \
--container-image=gcr.io/cloud-marketplace/google/nginx1:TAG
Replace TAG with the tag defined for a specific
version of NGINX container image available on Google Cloud Marketplace.
You can also configure
options to run your container .
Caution: Container Registry is deprecated. Effective March 18, 2025,
Container Registry is shut down, and writing images to Container Registry is unavailable. For
details on the deprecation and how to migrate to Artifact Registry, see
Container Registry deprecation .
Create an instance template that specifies a subnet
gcloud To create a regional or global instance template, use the
instance-templates create command .
Use the --subnet flag to place instances that are created from the template
into the subnet of your choice. The --subnet flag requires the --region
flag.
If you want to create a regional instance template, you must use the
--instance-template-region flag to set the region of the template. Make sure
that you use a subnet from the same region as where you want to create the
regional instance template.
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--region=REGION \
--subnet=SUBNET_NAME_OR_URL \
--stack-type=STACK_TYPE \
--instance-template-region=INSTANCE_TEMPLATE_REGION
Replace the following:
INSTANCE_TEMPLATE_NAME : the name for the
instance template
REGION : the region of the subnet
SUBNET_NAME_OR_URL : either the name of the subnet or
its URL
Note: If you use the subnet name, Google finds that subnet in the target
region (provided that it exists there). However, if you use the subnet URL,
the instance template can only be used to create instances in the specific
region that is associated with the subnet URL.
STACK_TYPE : Optional: whether IPv6 is enabled on the
default network interface. The following values can be used:
IPV4_ONLY, IPV4_IPV6, or IPV6_ONLY. If you
don't include this flag, the default value is IPV4_ONLY.
INSTANCE_TEMPLATE_REGION : the region where you want
to create the instance template. This region must be same as
REGION .
The following example creates a template called template-qa that only creates
instances in the subnet-us-qa subnet.
gcloud compute instance-templates create template-qa \
--region=us-central1 \
--subnet=subnet-us-qa
The output is similar to the following:
Created [https://compute.googleapis.com/compute/latest/projects/PROJECT_ID/global/instanceTemplates/template-qa].
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP
template-qa e2-standard-2 2019-12-23T20:34:00.791-07:00
Using this template to create instances for a
MIG (with or without
autoscaling ) automatically creates the instance
in the specified region and subnet. This lets you control the subnet of new
instances created for load balancing.
Use custom or public images in your instance templates
You can either use a custom image or a public image for your instance templates:
Custom images. As MIGs are designed to add and remove instances
frequently, it is useful to create a custom image
and specify it in the instance template. You can prepare your image with the
applications and settings that your VMs need, so you don't have to
manually configure those items on individual VMs in the MIG.
Public images. You can create an instance template that uses a
public image and a
startup script to prepare the instance after
it starts running.
Custom images are more
deterministic
and start more quickly than VMs with startup scripts. However, startup
scripts are more flexible, which helps you update the apps and settings
in your instances.
If you're managing images using image families ,
you can specify the name of your custom or public image family in the instance
template. For more information on image families, see best
practices when using image families
on Compute Engine.
Note: If the image you want to use belongs to a different project, you can
still use that image in your instance template, provided that the owner of that
project grants the MIG access to the images. For more information, see
Granting a MIG access to images .
What's next
View an instance template
to see its ID and instance properties.
Create a VM from an instance template .
Create a managed instance group (MIG) .
Update the VMs in an existing MIG
to use the properties from a different instance template.
Create a reservation for VMs .
Learn how to use managed workload identities
with MIGs to communicate with Google Cloud services and enable
mTLS communication between instances.
Send feedback
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License , and code samples are licensed under the Apache 2.0 License . For details, see the Google Developers Site Policies . Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2026-07-17 UTC.
Need to tell us more?
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-07-17 UTC."],[],[]]