【问题标题】:Cloud Spanner Emulator - docker initializationCloud Spanner 模拟器 - docker 初始化
【发布时间】:2021-03-02 22:17:01
【问题描述】:

我正在尝试设置一个启动 cloud spanner 并对其进行初始化的 docker 容器。

使用google提供的这个官方docker镜像:gcr.io/cloud-spanner-emulator/emulator

我希望在启动时自动初始化扳手。

我对 docker 文件进行了各种尝试,总结一下:

FROM gcr.io/cloud-spanner-emulator/emulator

RUN some gcloud command after to initialize local spanner db

但由于缺少有关此映像如何工作的信息,因此很难找到是否可以在每次容器启动时对其进行初始化。

我再说一遍,我需要在容器安装时自动运行它。它将构建管道。

有没有办法用这个提供的 docker 镜像来做到这一点?或者我应该创建自己的 dockerfile 来通过 gcloud cli 安装模拟器?

【问题讨论】:

    标签: google-cloud-spanner google-cloud-spanner-emulator


    【解决方案1】:

    如果我理解正确,您希望在 dockerfile 中启动 Spanner 模拟器。

    您可以创建自己的 dockerfile 来构建模拟器。

    请使用这些docker commands:

        docker pull gcr.io/cloud-spanner-emulator/emulator
        docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
    

    启动扳手模拟器。

    编辑:

    经过进一步澄清,目前正在尝试的似乎不是官方 Docker 映像“gcr.io/cloud-spanner-emulator/emulator”的可用功能。

    没有文档说明如何使用官方 Spanner Emulator Docker 映像来运行初始化脚本,GCP DocumentationSpanner emulator README 都没有。比如在启动时运行 gcloud 命令来创建一个 spanner 实例,上传一个 DDL 文件并使用该文件添加一个数据库。

    OP 在 cmets 中确定的解决方法似乎是目前最好的解决方案。

    【讨论】:

    • 不,这不是我想要做的。我想为 docker 的模拟器实例提供一些脚本,以便在它启动时运行。一些 docker 镜像提供了这个功能,你可以将文件放在容器的给定目录中,容器将使用它们来初始化服务。但显然,这个模拟器图像并非如此。而且您不能仅使用已设置的数据库进行预构建,因为它在内存中,并且每次重新启动时都会被删除。使用 docker 命令无济于事,因为这是我指定的构建管道。
    • 很抱歉没有完全理解您最初的意思,您能否进一步解释一下您希望使用什么类型的脚本,您是否尝试使用 gcloud CLI initialize a spanner emulator gcloud configuration
    • 所以更具体地说,我想创建一个扩展此文件的 Dockerfile。当它启动时,它必须自动创建我选择的实例和数据库+ddl。这样它就可以用于我的应用程序了。没有它,很难在构建系统中使用它,因为它都在内存中,并且每次容器重新启动时都会重置。所以我找到了一个解决方法,并使用官方 gcloud 容器hub.docker.com/r/google/cloud-sdk 来启动扳手模拟器以及 bash 的作业控制,按照docs.docker.com/config/containers/multi-service_container
    • 非常感谢您的澄清,我们对此进行了进一步调查,发现此功能在 Spanner 模拟器的官方 docker 映像中不可用。我很高兴您找到了解决方法,这似乎是实现您现在所寻找的最佳方法。
    • @SoufianeGhzal 我想做同样的事情。你能分享你的 Dockerfile 吗?
    【解决方案2】:

    这是一个 docker 文件示例,它允许启动 docker 模拟器并使用一些自定义 gcloud 命令进行初始化

    FROM google/cloud-sdk:slim
    
    RUN apt-get install -y google-cloud-sdk google-cloud-sdk-spanner-emulator
    
    COPY ./start_spanner.bash start_spanner.bash
    COPY ./schema.ddl schema.ddl
    
    CMD ./start_spanner.bash
    

    这里是文件start_spanner.bash的示例内容。

    #!/bin/bash
    
    set -m
    
    gcloud beta emulators spanner start --host-port=0.0.0.0:9010 &
    
    # configure gcloud cli to connect to emulator
    gcloud config set auth/disable_credentials true
    gcloud config set project someproject
    gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
    
    # create spanner instance
    gcloud spanner instances create someinstance \
      --config=emulator-config \
      --description="Test Instance" \
      --nodes=1
    
    # create spanner database with the given schema
    gcloud spanner databases create somedb \
     --instance=someinstance \
     --ddl-file=schema.ddl
    
    fg %1
    

    并且文件schema.ddl 只是您的扳手 ddl 运行以根据扳手的文档在模拟器中创建表。

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 2014-01-03
      • 2013-09-30
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多