A custom image is a copy of a VM’s boot disk, with its operating system and software, that you can use as the starting point for new VMs. Build a server once, save it as an image, and every VM created from that image starts out the same, with nothing to reinstall.
Images belong to a project. To use one in a different project, the second project has to be allowed to see it. That sharing step is where most people get stuck, and it is the part this guide originally left out. The walkthrough still follows the same path, but with the permissions made explicit.
This walks through creating an image, giving another project access to it, creating that other project, and launching a VM from the image. It then covers the choices on the image form, alternatives, and cost.
Prerequisites:
Open the console, then Click on menu > Compute engine > Images.

Click Create image.

Give the image a name, then choose the source and the source disk. The source disk is the disk you want to turn into an image. If that disk is attached to a running VM, Google recommends stopping the VM first so the disk is in a clean state. If you keep it running, the console asks you to confirm by selecting Keep instance running. For Windows VMs, stop the instance before you create the image.

Choose the type of encryption you want, then click Create. The choices on this form are explained below.

The image appears in the list.

Before you leave this project, decide who will create VMs from the image in the other project. That person needs the Compute Image User role, granted on the project that holds the image, or on the image itself. In the console, open IAM and Admin, then IAM, click Grant access, enter the person’s account, and choose Compute Engine, then Compute Image User.
If an instance group in the other project will use the image, grant the same role to that project’s Google APIs service account. The person creating the VM also needs permission to create instances in the destination project, which the Compute Instance Admin role covers. If you own both projects, as in this walkthrough, your account already has what it needs, but a teammate or automation will not.
Your organization may also use an organization policy that restricts which image projects can be used for VMs, so if a permitted account is still refused, ask your administrator.
Now create the new project. Click your current project at the top of the console.


Give the project a name and click Create. The Google Cloud Platform and Project Creation guide in this series explains project names and IDs.

Click your current project, then choose the project you just created.

A new project needs the Compute Engine API enabled, so click Enable. It also needs to be linked to a billing account before it can create VMs, which the Enabling Billing guide in this series covers.

Click VM instances.

Click Create.

Give the instance a name, choose the region and zone, and set the machine configuration for your needs.

In the boot disk section, click Change.

Click Custom images, then change the project to the one that holds the image. If the image project does not appear in the list, or you see a permission error, the Compute Image User role from the earlier step is the first thing to check. Select the image, set the boot disk size and type, then click Select.

The image is now selected for the instance.

Scroll down and click Create.

The instance now runs with the image’s data in this project.

A stored image is billed for the space it uses, based on its size and where it is stored. Delete images you no longer use. The new project also bills like any other, so a VM you launch to test the image keeps costing money until you delete it.
That covers creating a custom image, sharing it with another project, and launching a VM from it. To go further, explore Prwatech’s Google Cloud training program, which includes placement assistance.