【问题标题】:How can I execute "docker run" via a Cloud Function on a VM which has been started?如何在已启动的 VM 上通过云功能执行“docker run”?
【发布时间】:2021-03-02 04:53:39
【问题描述】:

在 VM 中,我有一个容器,其中包含我想通过云函数运行的简单 Python 脚本。我了解如何启动/停止 VM,但我无法弄清楚如何通过 Cloud Function 运行脚本。是否可以通过云功能做到这一点?

详情如下:

这是启动 VM 的 GCP 云函数,代码使用 Python SDK。

from googleapiclient import discovery

service = discovery.build('compute', 'v1')

# Start the VM

# Project ID defined here
project = '' 
zone = 'us-central1-a'  
# name of the VM
instance = 'my-instance'

request = service.instances().start(project=project, zone=zone, instance=instance)
response = request.execute()

print("success!")

此 VM my-instance 使用 Docker 容器部署(有关详细信息,请参阅 here)。

在虚拟机中,我可以像往常一样使用 docker 容器,例如与docker run -it container-name python3 myscript.py。 (就这个问题而言,这就像在 python 中运行一个打印“hello world”的脚本,正如link 中所解释的那样)

我怎样才能简单地执行docker run -it my-container python3 my-script.py之类的东西?

是否可以设置docker run在实例启动时执行?

【问题讨论】:

  • 1) 您的目标可能需要比 Cloud Functions 提供的更多资源/功能。考虑云运行。请注意,我不确定并且我倾向于将 Cloud Run 用于这些类型的任务。 2) 启动 VM 后,您可以使用 SSH 库连接到 VM 并运行 Docker 命令。这在 Python 和大多数其他语言中很容易做到。
  • 嗨@JohnHanley,感谢您的帮助。我考虑过 Cloud Run,但我的理解是容器使用的 RAM 是有限制的(我认为是 8GB)。如果可以访问更多 RAM,那么我同意 Cloud Run 适合这项任务。
  • 我不确定我是否关注你。 Cloud Run 是 Cloud Functions 的老大哥。而且您不需要 8 GB 的 RAM 来创建 SSH 连接来执行远程命令。
  • 我可能会感到困惑;您的意见会有所帮助。对于 Cloud Run,在容器内(例如运行 python 代码),是否有内存限制? cloud.google.com/run/docs/configuring/memory-limits我的理解是8GB。如果这是正确的,那么我需要在具有比这更多资源的 VM 中运行 docker 容器。这有意义吗?
  • 纪尧姆贴的答案很好。但是,如果您的新目标是从 Compute Engine 启动脚本运行 Docker,我建议改为使用旨在运行容器的容器优化操作系统。 cloud.google.com/container-optimized-os/docs

标签: docker google-cloud-platform google-cloud-functions google-compute-engine google-cloud-pubsub


【解决方案1】:

要在 VM 启动时执行某些操作,您可以使用 startup scripts。但是,不要使用带有-it 的命令,它用于交互模式;只需在启动脚本中执行 docker run 即可。

之后,您可以编写代码以在 docker run 命令结束时自动停止 VM。

【讨论】:

  • 谢谢!我没有意识到启动脚本的存在!
  • 鉴于您正在回答我的另一个问题,检测文件上传的云功能不能简单地将这个文件名传递给启动的虚拟机吗?上传到存储桶的文件filename.csv可以被python3 my-script.py filename.csv读取。清楚我来自哪里吗? stackoverflow.com/questions/66434805/…问题相关。
  • 我用“启动脚本”选项更新了另一个问题。
猜你喜欢
  • 2022-01-22
  • 2021-03-06
  • 2016-09-03
  • 2016-01-21
  • 1970-01-01
  • 2014-10-15
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多