Google cloud platform Google云容器编排和清理

Google cloud platform Google云容器编排和清理,google-cloud-platform,google-compute-engine,Google Cloud Platform,Google Compute Engine,简而言之,我想看看是否可以通过gcloud的create with container功能(或类似功能)在同一台机器上运行多个Docker容器。其思想是,将有一些“worker”容器(执行一些任意工作)运行并完成,然后是一个“cleanup”容器,该容器随后运行,每次执行相同的任务 详细解释: 我目前有一个应用程序,可以启动在谷歌云上Docker容器中运行的任务。我使用gcloud beta compute instances create with container启动运行指定容器的VM。我

简而言之,我想看看是否可以通过gcloud的
create with container
功能(或类似功能)在同一台机器上运行多个Docker容器。其思想是,将有一些“worker”容器(执行一些任意工作)运行并完成,然后是一个“cleanup”容器,该容器随后运行,每次执行相同的任务

详细解释: 我目前有一个应用程序,可以启动在谷歌云上Docker容器中运行的任务。我使用
gcloud beta compute instances create with container
启动运行指定容器的VM。我将称之为“worker”容器,它执行的任务与我的问题无关。但是,不管“worker”容器是什么,我都希望在第一个容器完成后运行第二个“cleanup”容器。通过这种方式,开发人员可以独立编写Docker容器,而不必“重复”由“cleanup”容器完成的工作

旁注


我知道我也可以指定一个启动脚本(例如bash脚本)来启动docker容器,如上所述。然而,当我第一次尝试这样做时,我一直遇到这样的问题,
docker pull
命令在与dockerhub通信时会由于某种原因超时或失败。使用容器创建的
gcloud beta计算实例似乎内置了错误处理/重试功能,这似乎很理想。是否有人有一个可以在启动脚本中提供相对健壮的错误处理的工作代码段?

据我所知,限制是每个VM实例一个容器。请参阅。

回答:目前无法使用
创建带容器的功能启动多个容器

备选方案:您提到您已经尝试使用启动脚本启动容器。另一种选择是指定一个。Cloud init内置于容器优化的操作系统中(与使用容器创建时使用的操作系统相同)

它通过添加和启动systemd服务来工作,这意味着您可以:

  • 指定您的服务应在其他服务之后运行:
    network online.target
    docker.socket
  • 指定服务在失败时重试的时间
  • 添加规范以运行清理(或在cloud init config中为其添加单独的服务)
这是一个可以作为起点的片段(您需要将其添加到
user data
metadata键下):

#cloud-config

users:
- name: cloudservice
  uid: 2000

write_files:
- path: /etc/systemd/system/cloudservice.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Start a simple docker container
    Wants=network-online.target docker.socket
    After=network-online.target docker.socket

    [Service]
    ExecStart=/usr/bin/docker run --rm -u 2000 --name=cloudservice busybox:latest /bin/sleep 180
    ExecStopPost=/bin/echo Finished!
    Restart=on-failure
    RestartSec=30

runcmd:
- systemctl daemon-reload
- systemctl start cloudservice.service