Google Compute Engine allows you to make custom images from a running virtual machine. The documentation provides a sufficient example but is a little bit scattered. This article collects and presents all the steps necessary to create your own Compute Engine images that you can use as a base for virtual machines.

1. Create a Packaged Image

Once your have booted your instanced and ssh’d in you can create your image using the gcimagebundle command.

sudo gcimagebundle -d <boot-device> -o <output-directory>

The boot device is /dev/sda so a complete example might look like this.

sudo gcimagebundle -d /dev/sda -o /tmp

2. Upload to Cloud Storage

Once you have a Compute Engine image you need to upload it to Cloud Storage by logging into your gcloud account and copying your file to a Cloud Storage bucket. Thankfully, Compute Engine installs the necessary gcloud and gsutil executables in the base virtual machines.

# login to your gcloud account
gcloud auth login

# make a bucket for compute engine images
gsutil mb gs://<bucket-name>

# copy your image to the bucket
gsutil cp /tmp/<image-name>.image.tar.gz gs://<bucket-name>

3. Create a Compute Engine Image

We don’t need our virtual machine any more. You can exit the machine and head back to your console. From your console you can create a compute engine image using gcloud compute.

gcloud compute images create <image-name> --source-uri gs://<bucket-name>/<image-name>.image.tar.gz

4. Use your Image to Create a Compute Engine Instance

Finally, now that we have a predefined image, you can create a compute engine instance using your image name.

gcloud compute instances create --image <image-name>

Your images offer the same functionality as the Google provided versions. You can mark them as DEPRECATED, OBSOLETE or DELETED to manage your deployment.