I am using golang to programmatically create and destroy one-off Compute Engine instances using the Compute Engine API.
I can create an instance just fine, but what I'm really having trouble with is launching a container on startup.
You can do it from the Console UI:
But as far as I can tell it's extremely hard to do it programmatically, especially with Container Optimized OS as the base image. I tried doing a startup script that does a docker pull us-central1-docker.pkg.dev/project/repo/image:tag
but it fails because you need to do gcloud auth configure-docker us-central1-docker.pkg.dev
first for that to work and COOS doesn't have gcloud nor a package manager to get it.
All my workarounds seem hacky:
- Manually create a VM template that has the desired container and create instances of the template
- Put container in external registry like docker hub (not acceptable)
- Use Ubuntu instead of COOS with a package manager so I can programmatically install gcloud, docker, and the container on startup
- Use COOS to pull down an image from dockerhub containing gcloud, then do some sort of docker-in-docker mount to pull it down
Am I missing something or is it just really cumbersome to deploy a container to a compute engine instance without using gcloud or the Console UI?