我正在使用 golang 使用Compute Engine API以编程方式创建和销毁一次性 Compute Engine 实例。
我可以很好地创建一个实例,但我真正遇到的问题是在启动时启动一个容器。
您可以从控制台 UI 执行此操作:
但据我所知,以编程方式执行此操作非常困难,尤其是使用容器优化操作系统作为基础映像时。我尝试做一个启动脚本,docker pull us-central1-docker.pkg.dev/project/repo/image:tag
但它失败了,因为你需要先做gcloud auth configure-docker us-central1-docker.pkg.dev
它才能工作,而 COOS 没有 gcloud 也没有包管理器来获取它。
我所有的解决方法似乎都很老套:
- 手动创建具有所需容器的 VM 模板并创建模板的实例
- 将容器放在外部注册表中,如 docker hub(不可接受)
- 使用带有包管理器的 Ubuntu 而不是 COOS,这样我就可以在启动时以编程方式安装 gcloud、docker 和容器
- 使用 COOS 从 dockerhub 中拉下包含 gcloud 的映像,然后执行某种 docker-in-docker mount 以将其拉下
我是否遗漏了什么,或者在不使用 gcloud 或控制台 UI 的情况下将容器部署到计算引擎实例真的很麻烦?